2016-10-04 67 views
2

當您使用CoCreateInstance從64位非託管代碼創建託管代碼COM對象時會發生什麼情況。當64位非託管代碼通過COM調用託管代碼時發生了什麼

我有一個包裝log4net提供COM接口的DLL。我打電話給CoCreateInstance,它正在返回一個沒有註冊錯誤的類。我已經在dll上運行了regasm,並且看到了註冊表中出現的條目。我懷疑這是某種32/64位不匹配。我認爲,從64位DLL調用時,託管的dll是JIT'X64。有誰知道從64位DLL創建託管COM對象時會發生什麼?任何建議什麼檢查,事情似乎與32位DLL的工作。

謝謝

+1

有4個版本Regasm.exe的,V2 VS v4和32位和64位。當你發佈這個小信息時,你必須使用正確的猜測。 –

回答

2

這是一個經典的32/64不匹配問題。

你想要做的是註冊.NET DLL與64位.NET運行時。使用「c:\ windows \ microsoft.net \ framework64 \ vXYZ \ regasm.exe」中的「regasm/tlb/codebase」,其中XYZ是版本。

如果您在.NET類中搜索對象的CLSID,可以在HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID配置單元中找到它,但不在HKEY_CLASSES_ROOT \ CLSID配置單元中。在使用64位工具註冊後,您將在HKEY_CLASSES_ROOT \ CLSID中找到您的CLSID。

您可能也想看看這個答案:Class not registered error for Instantiation of C# object via COM from VC++

+0

非常好!非常感謝你 – Dweeberly