我目前遇到的问题真的很奇怪。我尝试使用来自C++项目的托管C#类,但编译器找不到类型。
看看这张截图:

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