1

アンマネージ C++ dll を呼び出す C# GUI があります。コールバックは dll -> gui メッセージングに使用されます。

dll で、'\0' 文字を含む可能性のある LPTSTR が作成されます。その文字列は、コールバック パラメータを介して GUI に完全に戻す必要があります。

残念ながら、null 文字までは GUI に渡された文字列しか取得できません。マーシャリングが文字列をカットしているようです。

// C# callback declarations
public delegate bool callbackDelegate(int iEvent, [MarshalAs(UnmanagedType.LPWStr)] string SomeString);
private callbackDelegate callbackDelegateInstance;

// instantiating and calling the callback in C#
callbackDelegateInstance = new callbackDelegate(CallbackHandler);
DLLCallbackFunction(callbackDelegateInstance);

// C# callback handler
private bool CallbackHandler(int iEvent, [MarshalAs(UnmanagedType.LPWStr)] string SomeString)
{
    // SomeString only contains characters up until the null char
}

dll からの null 文字を含む文字列全体を返す方法はありますか?

dll と gui コードにアクセスできます。

4

1 に答える 1

0

LPTSTR の代わりに生のバイト配列としてマーシャリングできます。データが一定サイズでない場合は、長さパラメーターを追加する必要があります。

デリゲートは次のように宣言されます。

 public delegate bool callbackDelegate(int iEvent, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] data, int dataCount);

管理されていない側では:

typedef void (__stdcall *callbackDelegate)(int iEvent, const char* data, int size);
于 2013-01-23T21:33:51.023 に答える