Tenemos una DLL (un servidor COM) que se compilará bien en 32 bits y 64 bits, pero la DLL utiliza el mismo CLSID y AppID para la versión de 32 bits y la versión de 64 bits. ¿Está bien o tiene que cambiar esto?¿Cómo instalo las versiones de 32 bits y 64 bits de una DLL COM y "auto-select"?
Lo estoy preguntando porque aparentemente en una máquina de 64 bits, no podemos registrar la versión de 32 bits y la de 64 bits juntas. Sería bueno si las aplicaciones cliente de 32 bits pudieran usar automáticamente la DLL de 32 bits, y las aplicaciones cliente de 64 bits podrían usar automáticamente la DLL de 64 bits.
En una nota relacionada, tenemos el código fuente y el archivo de proyecto Visual Studio 2005 para una aplicación cliente ... ¿cómo compilamos una versión de 32 bits y de 64 bits de la misma aplicación? Es una aplicación de C#, e incluye una referencia a nuestro servidor DLL COM como esto:
<ItemGroup> <COMReference Include="ComServer">
<Guid>{C1FADEA6-68FD-4F43-9FC2-0BC451FA5D53}</Guid>
<VersionMajor>830</VersionMajor> <VersionMinor>0</VersionMinor>
<Lcid>0</Lcid> <WrapperTool>tlbimp</WrapperTool> <Isolated>False</Isolated>
</COMReference> </ItemGroup>
Si resulta que necesitamos un CLSID separado para 64 bits, ¿cómo hacemos esta referencia "solo para la configuración de 32 bits" en Visual Studio? ¿O tenemos que tener proyectos separados con el mismo código fuente: uno que se refiere a la DLL de 32 bits, y el otro que se refiere a la DLL de 64 bits?
Olvidé decir ... en el equipo de 64 bits hay una versión de 32 bits de regsvr32.dll en \ Windows \ SysWow64 \ para registrar archivos DLL de 32 bits en el área Wow6432Node. (Tendrá que acostumbrarse al patrón de nomenclatura completamente contra-intuitivo.) Tuvimos un problema con nuestro instalador: en una máquina de 64 bits no usaría el regsvr32 de 32 bits.dll, pero necesitábamos instalar una DLL de 32 bits. Así que terminamos escribiendo nuestra propia versión y ejecutándola de forma explícita. –
Al menos en Win7, regsvr32.exe es lo suficientemente inteligente como para llamar a la otra versión de sí mismo automáticamente si lo ejecuta contra el tipo opuesto de DLL. (Esto se aplica tanto a los archivos DLL de 32 bits como a los de 64 bits y a las versiones de regsvr32.exe). –
@Leo: Gracias por la sugerencia. Había leído sobre eso, pero descubrí que no funcionaba para mí en Vista, así que pensé que era algo que había caído entre las grietas. Solo comencé a probar en Win7 después de terminar el instalador. –