7

次のように定義されたネイティブ DLL に関数があります。

#include <string>
void SetPath(string path);

これを Microsoft の P/Invoke Interop Assistant に入れようとしましたが、「文字列」クラス (MFC からだと思いますか?) でチョークします。

さまざまな異なる型 (C# String、char[]、byte[]) としてマーシャリングを試みましたが、毎回 NotSupportedException または Native Assembly Exception を取得します (マーシャリングを試みたかによって異なります)。

ネイティブ文字列クラスが使用されているネイティブ/マネージド相互運用機能を行ったことがある人はいますか? これをマーシャリングする方法はありますか?独自のマーシャラーを作成する必要がありますか?

4

3 に答える 3

6

C++ 標準ライブラリの文字列クラスを使用しようとしているようです。それが元帥にとって簡単かどうかは疑わしい。char * と Marshal を StringBuilder として使用することをお勧めします。それが私が通常していることです。C++ 文字列を生成するラッパーを追加する必要があります。

于 2008-10-01T17:06:41.920 に答える
2

PInvoke 相互運用アシスタントは、C++ ではなく C のみをサポートします。残念ながら、MFC String クラス (CString だと思いますか?) は C++ であり、アシスタントでは機能しません。代わりに、次を使用してみてください

void SetPath(__in const WCHAR* path);
于 2008-10-01T17:39:41.560 に答える