Issue in compiling with marshal.h : error C2872: 'IServiceProvider' : ambiguous symbol

心不动则不痛 提交于 2019-12-05 08:51:08

问题


I am trying to use the marshalling library in my C++/CLI project. When compiled with #include <msclr/marshal.h> I get the error error C2872: 'IServiceProvider' : ambiguous symbol. Most of the resolutions seems to be suggesting moving #include <windows.h> like the one here -> Ambiguous references, but I dont have those includes. All I have is:

using namespace System;
using namespace System::Configuration;
using namespace std;
#include <msclr/marshal.h>

How do I debug this issue ?


回答1:


You do, indirectly, marshal.h includes it. It dumps an enormous amount of identifiers in the global namespace. The macros are especially awkward, lots of them match names used in the framework.

Lots of things that marshal.h does can be done by the Marshal class as well. But I can't help you with that, you didn't mention why you want to use it. You can solve this particular mishap by putting the #include directive before the using statements:

#include <msclr/marshal.h>
using namespace System;
using namespace System::Configuration;



回答2:


Make sure you only have the:

using namespace System;

in the cpp file of the CLR project and not in the header. Visual studio automatically adds it to the header when creating a CLR class library project. In the cpp itself, the includes must precede the "using namespace".



来源:https://stackoverflow.com/questions/4000663/issue-in-compiling-with-marshal-h-error-c2872-iserviceprovider-ambiguous

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!