使用marshal.h进行编译时出现问题:错误C2872:'IServiceProvider':模糊符号

ani*_*vas 28 c++-cli

我试图在我的C++/CLI项目中使用编组库.编译时#include <msclr/marshal.h>我得到错误error C2872: 'IServiceProvider' : ambiguous symbol.大多数决议似乎暗示#include <windows.h> 像这里的那样 - > 模糊的引用,但我没有那些包括.我只有:

using namespace System;
using namespace System::Configuration;
using namespace std;
#include <msclr/marshal.h>
Run Code Online (Sandbox Code Playgroud)

我该如何调试此问题?

Han*_*ant 45

间接地,marshal.h包括它.它在全局命名空间中转储了大量标识符.这些宏特别笨拙,很多都与框架中使用的名称相匹配.

marshal.h所做的很多事情也可以由元帅级完成.但我无法帮助你,你没有提到你为什么要使用它.您可以通过在using语句之前放置#include指令来解决这个特定的不幸事件:

#include <msclr/marshal.h>
using namespace System;
using namespace System::Configuration;
Run Code Online (Sandbox Code Playgroud)

  • Marshal :: StringToCoTaskMemAnsi + Marshal :: FreeCoTaskMem. (4认同)

小智 10

确保你只有:

using namespace System;
Run Code Online (Sandbox Code Playgroud)

在CLR项目的cpp文件中而不在标题中.创建CLR类库项目时,Visual Studio会自动将其添加到标题中.在cpp本身中,includes必须位于"using namespace"之前.

  • 事实上,这再次证实了在头文件中使用命名空间是邪恶的。从标题中删除它可以解决问题。 (3认同)