web-dev-qa-db-ja.com

marshal.hでのコンパイルの問題:エラーC2872: 'IServiceProvider':あいまいなシンボル

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>

この問題をデバッグするにはどうすればよいですか?

28
anivas

間接的に、marshal.hにはそれが含まれています。グローバル名前空間に膨大な量の識別子をダンプします。マクロは特に扱いにくく、フレームワークで使用されている名前と一致するものがたくさんあります。

Marshal.hが行う多くのことは、Marshalクラスでも実行できます。しかし、私はそれであなたを助けることができません、あなたはあなたがそれを使いたい理由について言及しませんでした。 #includeディレクティブを置くことでこの特定の事故を解決できますbefore usingステートメント:

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

次のものだけがあることを確認してください。

using namespace System;

ヘッダーではなく、CLRプロジェクトのcppファイルにあります。 Visual Studioは、CLRクラスライブラリプロジェクトを作成するときに、ヘッダーに自動的に追加します。 cpp自体では、インクルードは「using名前空間」の前にある必要があります。

9
Matan L.