我目前遇到的问题真的很奇怪。我尝试使用C#项目中的Managed C ++类,但编译器找不到该类型。
看一下这个截图:
引用了C ++项目(NGervill.Gervill.Native),根据对象浏览器,它包含所有必需的命名空间和类型。在我的源代码中,我添加了使用并使用了类但仍然遇到编译错误。
现在最奇怪的部分:可以引用Managed C ++项目中的其他类型。在另一个C#类中,我访问PortMixerProviderNative类的方法。这意味着目标平台和.net框架版本是正确的(.net 4.5 - x86 build)。
Visual Studio是否以某种方式缓存旧版本的托管C ++ DLL或其他什么原因导致此类问题?
答案 0 :(得分:1)
PortMixerNative是本机C ++类,而不是托管类。在某些情况下,本机类可以在程序集元数据中公开,通常是因为它们是托管类包装器中的私有字段的类型,但它们不能以任何方式从C#程序中使用。只有C ++ / CLI项目中的public ref class
声明可用。
目前尚不清楚你应该使用什么包装类。不是PortMixerNative。查看供应商的手册和/或代码示例,或者如果您需要更多帮助,请与他们联系。
答案 1 :(得分:0)
我终于找到了这个问题的解决方案:由于某种原因,实现PortMixerNative类的cpp文件未包含在项目中。将PortMixerNative.cpp再次添加到项目后,我终于可以看到此文件中存在语法错误。修复错误并重新编译.Native项目后,我可以成功引用该类。
奇怪的是,.Native项目即使使用没有实现的方法也能成功编译。如果有人遇到这个问题,请检查您尝试使用的类的所有方法是否都有实现。