私はC++構造体を持っています
struct UnmanagedStruct
{
char* s;
};
および C# 構造体
struct ManagedStruct {
string s;
}
どうすればマーシャリングできUnmanagedStruct
ますか? StringBuilder を使用する必要がありますか?
C++ ライブラリはUnmanagedStruct
getStruct() を公開します。
私はC++構造体を持っています
struct UnmanagedStruct
{
char* s;
};
および C# 構造体
struct ManagedStruct {
string s;
}
どうすればマーシャリングできUnmanagedStruct
ますか? StringBuilder を使用する必要がありますか?
C++ ライブラリはUnmanagedStruct
getStruct() を公開します。
編集および修正: 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
でください (これは問題ありません。フィールドはプライベートにする必要があります)。