4

私はC++構造体を持っています

struct UnmanagedStruct
{
   char* s;
};

および C# 構造体

struct ManagedStruct {
   string s;
}

どうすればマーシャリングできUnmanagedStructますか? StringBuilder を使用する必要がありますか?

C++ ライブラリはUnmanagedStructgetStruct() を公開します。

4

1 に答える 1

1

編集および修正: p/invoke 呼び出しの戻り値については、「通常の」メソッドは機能しません。メソッド パラメーターに関連する通常の 、ref、およびout動作に慣れていたため、戻り値も同様の方法で機能すると想定していました。戻り値の問題の解決策へのリンクは次のとおりです。
PInvoke error when marshalling struct with a string in it

StringBuilder構造体を C++ メソッドに byref パラメーターとして渡し、文字列がメソッドによって変更されるバッファーである場合にのみ、 a を使用する必要があります。戻り値については、文字列の型を指定するだけで済みます。この場合は次のとおりです。

struct ManagedStruct
{
    [MarshalAs(UnmanagedType.Lpstr)]
    string s;
}

ここではプライベートであるため、文字列を公開するプロパティを追加することを忘れないsでください (これは問題ありません。フィールドはプライベートにする必要があります)。

于 2009-07-31T23:23:00.143 に答える