我有一个最初为x86构建的C++ ATL COM DLL,由x86构建的.NET 4.0应用程序正在使用DLL,一切正常。无法正确注册Windows 7上的x64 COM DLL x64
在为x64重新编译COM dll后,使用c:\windows\system32\regsvr32
(un-reg x86 dll)注册后,我无法在Visual Studio添加引用窗口中看到COM DLL,我导出了注册表项HKCR和HKLM \ Softwares与x64和然后x86版本的DLL注册,并没有键丢失,各自的键指向正确的DLL位置。
此外,在注册x64 dll之后,我可以通过导航到文件所在的文件夹并选择它,但它仍然无法执行(.net程序集设置为x64)并添加了对dll的引用,并且出现以下错误
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {00000000-0000-0000-0000-A797AD238051} failed due to the followi ng error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASS NOTREG)). at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolea n noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurity Check) at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boo lean fillCache) at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibil ityChecks, Boolean skipCheckThis, Boolean fillCache) at System.Activator.CreateInstance(Type type, Boolean nonPublic)
我已经花了大量的时间在网上搜索,但没有发现任何远程关闭,没有人见过这样的事,或任何调试工具我也许可以使用?
我不拥有dll,拥有它的人可以看到曾经在机器上构建过的x64 dll,但在其他两台机器上尝试过,并且两者都无法工作。
没有看到对话框中的组件是完全正常的,VS是一个32位的进程,所以只能看到32位的COM服务器。不要取消注册您的x86版本。我无法跟随其余的。 – 2012-07-11 23:57:45
x64的挑战之一是[注册表重定向器](http://msdn.microsoft.com/en-us/library/windows/desktop/aa384232(v = vs.85))。aspx)这有助于 - 有时太多。有可能一个注册是践踏另一个。 SysInternals [ProcMon](http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)是很多情况下的好工具。在重现问题的同时监视注册表,您可以看到真正正在读取的注册表项。 – 2012-07-12 04:05:55
我也建议你通过将InteropServices从图片中解放出来来简化事情。使用C++构建简单的32位和64位测试客户端。在尝试从托管代码调用COM对象之前先让那些工作正常。 – 2012-07-12 04:07:59