我有一個最初爲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