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