Pregunta

Tengo un producto comercial que es una DLL (código nativo de 32 bits) y ahora es el momento de crear una versión de 64 bits.Entonces, al instalar en Windows de 64 bits, la versión de 32 bits ingresa a Windows\SysWOW64, y la versión de 64 bits ingresa a...Windows\System32!(Estoy mordiendo mi lengua aquí ...) o las DLL (s) se pueden instalar junto con la aplicación del cliente.

¿Cómo debería nombrar la DLL de 64 bits?

Mismo nombre que 32 bits:Dos archivos que hacen lo mismo, tienen el mismo nombre, pero no son totalmente intercambiables.¿No es esa una receta para la confusión y los problemas de soporte?

Diferentes nombres (por ej.product.dll y product64.dll):Ahora las aplicaciones cliente tienen que saber si están ejecutando 32 bits o 64 bits para poder hacer referencia a mi DLL, y hay lenguajes en los que eso no se sabe hasta el tiempo de ejecución; .NET es solo un ejemplo.Y ahora todos los clientes compilados estáticamente tienen que condicionar las declaraciones de importación:IF target=WIN64 ENTONCES importe Blah desde "product64.dll" O BIEN importe Blah desde "product.dll" ENDIF

El producto contiene cantidades masivas de código C y una gran parte de C++; trasladarlo a C# no es una opción.

¿Consejo?¿Sugerencias?

¿Fue útil?

Solución 3

He decidido seguir a Microsoft en este, que han mantenido los mismos nombres para los archivos DLL en System32 cuando fueron a 64 bits. En Win7 / 64, System32 \ avicap32.dll es una DLL de 64 bits!

Hay una cierta confusión potencial para mí y mis clientes, teniendo DLL de 32 bits y de 64 bits con el mismo nombre. Sin embargo, creo que sería peor tener a todos mis clientes tienen que hacer su código de palabra de ancho sensible. Especialmente los desarrolladores de .NET, que a menudo pueden salir de su conjunto de plataforma de destino a '' Cualquier CPU.

Otros consejos

Aplicaciones cliente no Tienes que "saber" que son de 32 o 64 bits.El sistema operativo carga automáticamente las DLL desde la ubicación adecuada porque no es posible cargar una DLL de 32 bits en un proceso de 64 bits y no es posible cargar una DLL de 64 bits en un proceso de 32 bits.

Si una aplicación de 32 bits intenta cargue algo desde system32, el sistema operativo lo redireccionará silenciosamente al directorio SysWow64, forzando la carga de la versión de 32 bits.

Al tener nombres diferentes, se derrota todo este mecanismo.Un mecanismo creado específicamente para permitirle utilizar el mismo nombre.

¿Por qué no prefijo de la DLL de con un guión ... como product_32.dll y product_64.dll ? O indicados mediante el uso de un prefijo plataforma - product_x86_32.dll y product_x86_64.dll ? Al menos que se desactive la confusión de la denominación de la DLL ... ¿Qué opinas?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top