在我的 COM dll 的 DllRegisterServer 方法中,我以前有调用 LoadTypeLibEx(module, REGKIND_REGISTER, &pTypeLib) 的代码来注册我的 COM 类及其相应的 TypeLib。我的 COM DLL 是 64 位的。我注意到在我的 64 位 Vista 系统上,在 HKCR:\\TypeLib\{myguid}\1.0\0 下,我找到了一个 win32 子项,其中包含我的 COM DLL 的位置。
我在单独的 COM DLL 中还有一些其他代码,我支持这些代码使用旧的、现已弃用的 CComModule.RegisterServer(TRUE) 调用。此代码在 0 项下为 64 位 DLL 创建一个 win64 子项,在 0 项下为 32 位 DLL 创建一个 win32 子项。在所有情况下,我都使用正确位版本的 regsvr32 进行注册(将 regsvr32 位数与 DLL 位数相匹配)。
为什么 LoadTypeLibEx 和 _AtlComModule.RegisterServer 都没有为包含我的 TypeLib 的 64 位 dll 创建 win64 key ,而旧的 CComModule.RegisterServer 创建正确的 key ?
最佳答案
似乎我所看到的关于 win32/win64 子键的行为反射(reflect)了这样一个事实,即某些类型库可以在 64 位和 32 位程序中使用,因为它们不包含位约束(读取:指针)参数。同时,其他类型库需要针对 win32 和 win64 的不同条目,因为它们不兼容。
因此,我看到的行为似乎并不是因为我使用的注册方法,而是因为底层类型库。
关于c++ - 调用 CComModule.RegisterServer、_AtlComModule.RegisterServer 和 LoadTypeLibEx 进行 TypeLib 注册有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/698472/