0
C#でC++のDLLを使用していて、char *を渡して問題が発生しました。構造体をchar *でC++のC++のdll関数に渡す
すべての機能をまず以下になります:構造体は次のように定義されて
[DllImport("xyz.dll")]
public static extern int ReadWrite_VCP(IntPtr handle, ref DATA_BUFFER readBuffer, ref DATA_BUFFER writeBuffer, int timeout);
:
public struct DATA_BUFFER
{
public string buffer;
[MarshalAs(UnmanagedType.U4)]
public int length;
[MarshalAs(UnmanagedType.U4)]
public int transferCount;
}
関数呼び出しは次のとおりです。一般的には
ReadWrite_VCP(handle, ref rBuffer, ref wrBuffer, 5000);
これが正常に動作しますしかし、問題は、ReadWrite_VCP関数がchar配列( '\ 0'文字を含む)を書き込むということです。この結果、データが '\ 0' '1' '2' '3'の場合、文字列は '\ 0'で終わるので空です。
私は既に成功していないStringbuilderまたはバイト配列を使用しようとしました。 C++側の
は、関数は次のようになります。
typedef struct
{
UCHAR *buffer;
UINT32 length;
UINT32 transferCount;
} DATA_BUFFER ;
と機能:
unsigned int ReadWrite_VCP (HANDLE handle, DATA_BUFFER* ReadBuffer, DATA_BUFFER* writeBuffer, UINT32 timeout);
私は誰も私を助けることができると思います!
ありがとうございました!
これは文字列ではありません。これはバイト配列です。あなたは 'byte []'を考えているかもしれませんが、私はマーシャラーがマーシャリングするバイト数を教えられるかどうかは分かりません。私の推測では、最初のメンバを 'IntPtr'と宣言するのが最善の方法です。 –