1

VS2010 を使用して、パブリック インターフェイスで MFC CStrings を使用するアンマネージ C++ DLL の周りに C++/CLI ラッパー DLL を構築しています。アンマネージ C++ DLL には、アクセスする必要があるクラスが含まれています。私の問題は、このクラスに次のような CString 参照を使用するメソッドが含まれていることです。

BOOL GetUnits(eSysOfUnits sysUnit, CString &Unit, Cstring &Format);

私のC++/CLIラッパーで、このようにアクセスしようとしています

BOOL GetUmUnits(eSysU sysunit, String^ %cunit, String^ %format)
{
   GetUnits(sysunit, marshal_as<CString>(cunit), marshal_as<CString>(format));
}

これにより、コンパイラエラーが表示されます

C2665: msclr::interop::marshal_as : 3 つのオーバーロードのいずれも、すべての引数の型を変換できませんでした

GetUmUnits は、C# フォームによってアクセスされます。cunit と format は、アンマネージ コードで更新する必要があります。

私は何が間違っているのですか?

4

1 に答える 1

1

ラッパーは、管理対象String^を実際のCStringオブジェクトに変換して直接渡す必要があります。CStringマーシャラーは、オブジェクトの作成方法を知りません。

さまざまCStringなバージョンの MFC にはさまざまなバージョンがあるため、アンマネージ DLL が作成するのと同じ MFC バージョンにリンクする必要があります。

于 2012-04-26T17:09:00.107 に答える