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

本文关键字:什么 托管代码 调用 非托管代码 64位 COM | 更新日期: 2023-09-27 18:11:26

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

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

谢谢

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

这是一个典型的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。

你可能也想看看这个答案:类未注册错误通过COM实例化c#对象从vc++