私はC++で次の構造体を持っています:
#define MAXCHARS 15
typedef struct
{
char data[MAXCHARS];
int prob[MAXCHARS];
} LPRData;
そして、これらの構造体の 3 つの配列を取得するために p/invoking している関数:
void GetData(LPRData *data);
C++ では、次のようにします。
LPRData *Results;
Results = (LPRData *)malloc(MAXRESULTS*sizeof(LPRData));
GetData( Results );
それは問題なく動作しますが、C# では動作しないようです。次のような C# 構造体を作成しました。
public struct LPRData
{
/// char[15]
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
public string data;
/// int[15]
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 15)]
public int[] prob;
}
そして、それらのうちの 3 つの配列 (およびそのすべてのサブ配列) を初期化し、これに渡すと:
GetData(LPRData[] data);
成功して戻りますが、LPRData 配列のデータは変更されていません。
LPRData の 3 つのサイズの生のバイト配列を作成し、それを次のような関数プロトタイプに渡すことさえ試みました。
GetData (バイト [] データ);
しかし、その場合、最初の LPRData 構造から「データ」文字列を取得しますが、同じ LPRData からの「prob」配列を含め、その後は何も取得しません。
これを適切に処理する方法のアイデアはありますか?