当64位非托管代码通过COM调用托管代码时会发生什么

时间:2016-10-04 00:52:28

标签: c# c++ dll com 64-bit

使用CoCreateInstance从64位非托管代码创建托管代码COM对象时会发生什么。

我有一个包含log4net的DLL,提供了一个COM接口。我正在调用CoCreateInstance,它正在返回一个没有注册错误的类。我在dll上运行了regasm,我看到条目出现在寄存器中。我怀疑这是某种32/64位不匹配。我假设当从64位dll调用时,托管dll是JIT' x64。有谁知道从64位dll创建托管COM对象时会发生什么?关于要检查什么的任何建议,事情似乎与32位dll一起使用。

由于

1 个答案:

答案 0 :(得分:2)

这是一个典型的32/64不匹配问题。

您要做的是使用64位.NET运行时注册.NET DLL。使用“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++