2

アンマネージ ネイティブ ライブラリからマネージ C# コードへのコールバックを使用しています。コールバック関数はヘッダー ファイルで宣言されています。

typedef void* (TNotice)(wchar_t *msg, bool error);

コールバックには文字列パラメーター msg があります。わかりません。なぜ c# で宣言が機能しないのですか:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate IntPtr CallbackDelegate([MarshalAs(UnmanagedType.LPWStr)]string msg, bool error);

しかし宣言:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate IntPtr CallbackDelegate([MarshalAs(UnmanagedType.LPWStr)]StringBuilder msg, bool error);

正常に動作します。

4

1 に答える 1

5

StringBuilderパラメータはoutパラメータまたは戻り値であるため、を使用する必要があります。そのような場合、通常のstring. 使用するマーシャリングは正しいです。

于 2013-04-11T12:31:05.720 に答える