【问题标题】:Can't access C++ class/namespace from C# in VS 2010 SP1无法从 VS 2010 SP1 中的 C# 访问 C++ 类/命名空间
【发布时间】:2012-01-27 04:21:42
【问题描述】:

这适用于 Visual Studio 2010,SP1。我在一个单独的 C++ 项目中有一个 C++ 类,我想从另一个项目中访问并在 C# 中使用它(两者都生活在同一个解决方案下)。我从 C# 中引用了我的 C++ 项目。我使用 /clr 选项构建我的 C++ 项目。我已经构建了一个 C++ 类的托管版本,它调用相应的本机 C++ 类。

当我从我的 C# 项目的“引用”中右键单击我的 C++ 项目引用并单击“在对象浏览器中查看”时,我的 C++ 项目作为对象列表的一部分存在,我可以打开它并查看我正在尝试使用的类、命名空间等。

但是,在 C# 代码中,当我尝试执行“使用”时,它不是命名空间自动完成列表的一部分,事实上,如果我键入 C++ 命名空间,它会给出编译错误。 “错误 1 ​​找不到类型或命名空间名称‘MyCppClass’(您是否缺少 using 指令或程序集引用?)”

这个问题的答案是否定的,我没有遗漏 using 指令或程序集引用,如上所述。此外,我的 C++ 类不存在于默认命名空间中,它们根本不存在于我的 C# 项目的 Universe 中。

那么……我做错了什么?

【问题讨论】:

  • 您可以添加任何其他外国 dll 吗?只是普通的c#?如果您的项目设置为 .net 4 客户端配置文件,我过去也遇到过类似的问题,然后尝试将其更改为普通的 .net 4,看看是否有帮助。
  • 我不知道其他外国dll,需要尝试,但我可以参考其他C#项目。我被配置为 .net 4 客户端,并将其切换到普通客户端,但这并没有解决我引用 C++ 对象的问题。
  • 我也有同样的问题...有没有人解决过这个问题?

标签: c# c++ visual-studio-2010 interop


【解决方案1】:

这可能为时已晚,但我刚遇到和你一样的问题,然后回来看看你是否有答案。

最终我发现您需要将 COM 类与 .net 包装类一起添加为对 .net 项目的引用。 我创建了一个 c++ COM dll 并使用 tlbimp 生成一个 .net 包装器。然后我将包装器添加到我的项目中,并在 COM 选项卡下添加引用,它在那里有我的 COM 程序集,所以我也添加了它,我的项目编译并运行良好。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多