1

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

看看这个截图: 问题截图

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

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

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

4

2 回答 2

1

PortMixerNative is a native C++ class, not a managed class. Native classes can be exposed in the assembly metadata in some cases, usually because they are the type of a private field in a managed class wrapper, but they are not usable in any way from a C# program. Only public ref class declarations in the C++/CLI project are usable.

It isn't clear what wrapper class you are supposed to use. Not PortMixerNative. Check the vendor's manual and/or code samples or contact them if you need more help.

于 2013-11-03T18:37:36.120 回答
0

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

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

于 2013-11-03T19:40:43.623 回答