繁体   English   中英

无法在Windows 7 x64上正确注册x64 COM dll

[英]unable to properly register x64 COM dll on windows 7 x64

我有一个最初为x86构建的C ++ ATL COM DLL,dll正由为x86构建的.NET 4.0应用程序使用,一切正常。

重新编译COM dll for x64,然后使用c:\\windows\\system32\\regsvr32注册它(取消注册x86 dll之后),我无法在Visual Studio的Add Reference窗口中看到COM DLL,我导出了HKCR和HKLM \\ Softwares的reg键与x64和x86版本的dll注册,并且没有键丢失,相应的键指向正确的dll位置。

另外,在注册x64 dll后,我可以通过导航到文件所在的文件夹并选择它来添加对dll的引用,但它仍然无法执行(.net程序集设置为x64),并出现以下错误

System.Runtime.InteropServices.COMException(0x80040154):由于以下错误,检索CLSID为{00000000-0000-0000-0000-A797AD238051}的组件的COM类工厂失败:80040154未注册类(HRESULT异常:0x80040154( REGDB_E_CLASS NOTREG))。 System.RuntimeType.CreateInstanceDefaultCtor上的System.RuntimeType.CreateInstanceSlow(布尔值publicOnly,布尔值skipCheckThis,Boo lean fillCache)中的System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,布尔值publicOnly,Boolea n noCheck,Boolean&canBeCached,RuntimeMethodHandleInternal&ctor,Boolean&bNeedSecurity Check) (Boolean publicOnly,Boolean skipVisibil ityChecks,Boolean skipCheckThis,Boolean fillCache)System.Activator.CreateInstance(Type type,Boolean nonPublic)

我花了相当多的时间在网上搜索,但没有找到任何远程关闭,有人看到过这样的东西,或者我可能使用的任何调试工具?

顺便说一句,我不拥有dll,拥有它的人,可以在机器上看到x64 dll,但是已经尝试过其他2台机器,而且它们都没有用。

这个问题很老,我需要更多信息才能完全排除故障。 但是,我可以为遇到同一问题的任何人提供一些提示。

鉴于您使用的是regsvr32 ,DLL正在使用称为自注册的东西。 这意味着DLL在名为DllRegisterServer的导出函数中处理自己对Windows注册表的添加。 正如您似乎发现的那样,注册表项在x86和x64之间有所不同,但这不一定是您的核心问题。 您可以(通常应该)同时注册x86和x64类型库。

检查特定类型库如何注册的一种方式是oleview工具。 注册表中的信息相同,但此工具可能更友好一些。 该工具应位于Visual Studio命令提示符下设置的路径中。 听起来错误是关于具有给定GUID的类,您可以从对象类 - >树中的所有对象检查:

在树中查找一个类

如果您碰巧拥有该类(您可能需要重新注册x86版本以进行检查),您可以通过扩展刚刚找到的GUID的条目来查找该类实现的COM接口的信息。 如果有类型库,它应该这样说。 请注意,TypeLib信息中的路径可以同时包含win32win64条目:

win32和win64路径的接口示例

没有进一步的信息,很难说,但我猜想x64的自注册和/或类型库有问题。 顺便提一下,对于您计划发布的库,您可能不会依赖自行注册 - 安装程序包可以而且应该自己创建注册表项。 如果您确实有进一步的信息,我可以尝试提供更多细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM