Nous avons une DLL (un serveur COM) qui se compilera correctement en 32 bits et 64 bits, mais la DLL utilise les mêmes CLSID et AppID pour la version 32 bits et la version 64 bits. Est-ce OK ou est-ce que cela doit changer? Je demande cela parce que, apparemment, sur une machine 64 bits, nous ne pouvons pas enregistrer la version 32 bits et la version 64 bits ensemble. Il serait bon que les applications client 32 bits utilisent automatiquement la DLL 32 bits et que les applications clientes 64 bits utilisent automatiquement la DLL 64 bits. Sur une note connexe, nous avons le code source et le fichier de projet Visual Studio 2005 pour une application cliente ... comment compiler une version 32 bits et 64 bits de la même application? Il est une application C#, et il inclut une référence à notre DLL serveur COM comme ceci:Comment puis-je installer les versions 32 bits et 64 bits d'une DLL COM et "auto-select"?
<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>
S'il s'avère que nous avons besoin d'un CLSID séparé pour 64 bits, comment faisons-nous cette référence "uniquement pour la configuration 32 bits" dans Visual Studio? Ou devons-nous avoir des projets séparés avec le même code source: un qui fait référence à la DLL 32 bits, et l'autre qui fait référence à la DLL 64 bits?
Oublié de dire ... sur la machine 64 bits, il y a une version 32 bits de regsvr32.dll dans \ Windows \ SysWow64 \ pour enregistrer des DLL 32 bits dans la zone Wow6432Node. (Vous devrez juste vous habituer au modèle de nommage complètement contre-intuitif.) Nous avons eu un problème avec notre installateur - sur une machine 64 bits, il n'utiliserait pas le regsvr32 32 bits.DLL, mais nous devions installer une DLL 32 bits. Nous avons donc fini par écrire notre propre version et l'exécuter explicitement. –
Au moins sur Win7, regsvr32.exe est assez intelligent pour appeler l'autre version de lui-même automatiquement si vous l'exécutez sur le type opposé de DLL. (Cela vaut pour les DLL 32 bits et 64 bits et les versions de regsvr32.exe.) –
@Leo: Merci pour le conseil. J'avais lu à ce sujet mais j'ai trouvé que cela ne fonctionnait pas pour Vista, alors j'ai pensé que c'était juste quelque chose qui était tombé entre les mailles du filet. Je n'ai commencé à tester sur Win7 qu'après avoir terminé l'installation. –