2010-04-27 14 views
7

SQLite de PHX Software ha combinado un ensamblado administrado (System.Data.SQLite) con un dll no administrado (el dll SQLite de 32 o 64 bits) en un archivo y logró unirlos.¿Cómo combino un dll no administrado y un ensamblado administrado en un archivo?

¿Cómo puedo hacer esto? ¿Debo incrustar el ensamblado administrado en el dll no administrado, o viceversa?

es decir. mis preguntas son:

  1. ¿En qué orden debo hacer esto?
  2. ¿Qué herramientas o conocimiento necesito para hacer esto?
  3. ¿Cómo (si es diferente) puedo vincular a las funciones exportadas desde el dll no administrado en mi código administrado?

La razón por la que pregunto esto es porque quiero construir un contenedor administrado zLib. Sé que hay clases administradas en .NET, pero por experiencia son un poco limitadas (y un poco descaradas ya que no hacen el almacenamiento en búfer adecuado), así que me gustaría crear mi propia copia, también porque quiero aprende a hacer esto

Entonces, ¿alguien sabe lo que tengo que hacer y cómo?

que he encontrado lo siguiente:

Voy a probar esto, pero cualquier información adicional disponible sería bueno también.

+0

Piense dos veces antes de hacer esto, especialmente con sus montajes de "núcleo". Si esta no es la característica esencial de su código, es mejor que dichos ensamblajes se carguen dinámicamente.En otro caso, cualquiera que use dicho ensamblado deberá realizar algunos pasos adicionales para asegurarse de que utiliza la versión adecuada (x86 frente a x64), incluso si no usó ninguno de sus códigos no administrados. Es razonable para usted ejemplo de 'System.Data.SQLite' (característica esencial) pero podría no ser razonable en su caso. – SergGr

Respuesta

0

¿Ha intentado ejecutar reflector en System.Data.SQLite para ver cómo lo hacen?

Me imagino que podría:

  • Incluir los 32 y 64 bits DLL como recursos en un ensamblado administrado
  • Extracto de la correcta función de valor de bits a algún lugar
  • SetDllDirectory de llamadas() a través de PInvoke si es necesario para que windows pueda encontrar el archivo DLL extrae
  • instancias de un logrado clase de contenedor de 32 o 64 bits que tiene referencias a la DLL

Sin embargo, como zlib está en C, también puede ajustar las llamadas que necesita en un conjunto CLR implementado en C++ utilizando la fuente zlib. Pero no estoy seguro de cómo manejaría el bitness en ese caso.

+0

esto es posible y maneja cajas de 32 y 64 bits. No es así como se hace en sqlite. – vidstige

0

buscar mergebin de sqlite debería ser lo que estás buscando.

puede combinar conjuntos gestionados y no gestionados togeteher.

MS también parece tener somthing que decir acerca de su uso here

+1

El enlace de Microsoft es completamente irrelevante. – vidstige

Cuestiones relacionadas