c# - 从 VC++ 通过 COM 实例化 C# 对象的类未注册错误

标签 c# .net visual-c++ com regasm

在 VC++ 项目中,我试图创建一个包含在 C# 项目中的 C# 类的实例(通过 COM)。

事实

  • C# 和 C++ 项目都是使用 .NET 4.0 编译的
  • 正在使用 regasm/codebase "CSharpProjectName.dll""注册 C# .dll,Windows 命令提示符报告“类型已成功注册。”
  • 在 C++ 项目中,我尝试在 C# 项目中创建一个类的实例,但我得到的 HRESULT 为 0x80040154 - 类未注册

这是我尝试从 C# .dll 创建 .NET 对象实例的示例。我试图实例化的具体类称为 Employee,为了简单地提出我的问题,它实现了 IPerson 接口(interface):

    CSharpProjectName::IPersonPtr pPersonPtr;
    HRESULT hr = pPersonPtr.CreateInstance(CSharpProjectName::CLSID_Employee);

即使我使用“regasm/codebase”注册了 c# .dll 并确认注册表中存在 key ,为什么我还是收到“类未注册”错误?

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

我过去遇到过这个问题,这是因为两个进程都不是 32 位或 64 位的。如果您运行的是 32 位操作系统,您现在可以停止阅读,因为我所说的不适用。

使用 regedit 尝试在注册表中找到您的 ProgId 和 CLSID。如果您的 C++ 项目是 32 位的,请确保您的 C# 类已注册到 32 位配置单元--HKEY_CLASSES_ROOT\Wow6432Node。如果您的 C++ 项目是 64 位的,请确保您的 C# 类已注册到 64 位配置单元 --HKEY_CLASSES_ROOT。

如果需要注册到64位的hive,可能需要调用c:\windows\microsoft.net\framework64下的RegAsm.exe版本...

出现问题的另一种可能性是您可能需要运行 .NET 4.0 版本的 regasm.exe。如果您只是在命令行中键入“regasm”,它会为您提供正在运行的 regasm 版本。您可能需要键入 .NET 4.0 版 regasm 的完整路径——位于 c:\windows\microsoft.net\framework\v4.0.3019\regasm.exe。

关于c# - 从 VC++ 通过 COM 实例化 C# 对象的类未注册错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9711079/

相关文章:

c# - c#中的表单刷新问题

c# - 使用自定义分隔符解析一个巨大的文本文件(大约 2GB)

c# - 多色文本框 C#

c# - 从 asp.net 中的代码后面调用 jquery 函数似乎不起作用

c# - Azure 搜索 : Indexed document count does not match the total number of uploaded records

c# - unlockbits、lockbits 和 try-finally

c++ - 在 mfc/ole 中检测鼠标点击

C# 泛型 - 语法帮助

c++ - seekg() 没有按预期工作

c++ - 在 VC++ 中解决 hid.lib "unresolved external symbol"链接器错误