我们有一个 DLL(COM 服务器),可以在 32 位和 64 位版本中正常编译,但 DLL 对 32 位版本和 64 位版本使用相同的 CLSID 和 AppID。这是可以的还是必须改变?
我问这个问题是因为显然在 64 位机器上,我们无法同时注册 32 位版本和 64 位版本。如果 32 位客户端应用程序可以自动使用 32 位 DLL,并且 64 位客户端应用程序可以自动使用 64 位 DLL,那就太好了。
与此相关的是,我们有客户端应用程序的源代码和 Visual Studio 2005 项目文件...我们如何编译同一应用程序的 32 位和 64 位版本?它是一个 C# 应用程序,它包含对 COM 服务器 DLL 的引用,如下所示:
<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>
如果事实证明我们需要一个单独的 64 位 CLSID,我们如何在 Visual Studio 中使该引用“仅适用于 32 位配置”?或者我们是否必须拥有具有相同源代码的单独项目:一个引用 32 位 DLL,另一个引用 64 位 DLL?
两个版本都可以(而且确实应该)对所有内容使用相同的 GUID。
在 32 位机器上,您无法注册或使用 64 位 DLL,因此没有问题。 64 位 DLL 根本不参与其中。
在 64 位计算机上,64 位 DLL 在 HKLM/Software/Classes/CLSID(等)中注册,32 位 DLL 在 HKLM/Software/Wow6432Node/Classes/CLSID 中注册。 (我想知道你从哪里得到的建议,不能在 64 位机器上注册 32 位 DLL...)在 64 位机器上运行的 32 位客户端将在注册表中的正常位置查找,但操作系统会默默地将其重定向到 Wow6432Node 键。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)