【问题标题】:Managed C++ class cannot be referenced from C#无法从 C# 引用托管 C++ 类
【发布时间】:2013-11-03 18:15:11
【问题描述】:

我目前遇到的问题真的很奇怪。我尝试使用 C# 项目中的托管 C++ 类,但编译器找不到该类型。

看看这个截图:

托管 C++ 项目 (NGervill.Gervill.Native) 被引用,并且根据对象浏览器,它包含所有必需的命名空间和类型。在我的源代码中,我添加了 using 和 used 类,但仍然出现编译错误。

现在最奇怪的部分是:可以引用托管 C++ 项目中的其他类型。在另一个 C# 类中,我访问 PortMixerProviderNative 类的方法。这意味着目标平台和 .net 框架版本是正确的(.net 4.5 - x86 构建)。

Visual Studio 是否以某种方式缓存了托管 C++ DLL 的旧版本,或者还有什么可能导致此类问题?

【问题讨论】:

    标签: c# .net visual-studio visual-studio-2013 managed-c++


    【解决方案1】:

    PortMixerNative 是原生 C++ 类,而不是托管类。在某些情况下,本机类可以在程序集元数据中公开,通常是因为它们是托管类包装器中私有字段的类型,但它们不能以任何方式从 C# 程序中使用。只有 C++/CLI 项目中的 public ref class 声明可用。

    尚不清楚您应该使用什么包装类。不是 PortMixerNative。如果您需要更多帮助,请查看供应商的手册和/或代码示例或联系他们。

    【讨论】:

    • PortMixerNative 类是托管类。 (声明为public ref class PortMixerNative)。我是这个库的供应商,PortMixerNative 是我打算使用的包装器。
    【解决方案2】:

    我终于找到了这个问题的解决方案:由于某种原因,实现 PortMixerNative 类的 cpp 文件没有包含在项目中。再次将 PortMixerNative.cpp 添加到项目后,我终于可以看到该文件中存在语法错误。修复错误并重新编译 .Native 项目后,我可以成功引用该类。

    奇怪的是,.Native 项目即使使用没有实现的方法也能成功编译。如果有人也遇到这个问题,请检查您尝试使用的类的所有方法是否都有实现。

    【讨论】:

      猜你喜欢
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      相关资源
      最近更新 更多