0

これは私にとってトリッキーです。

const int * const buffer[]

現在、以下のように翻訳しています。

byte[] buffer

問題は、DLL が上記のパラメーターを使用して関数を呼び出しているときに、AccessViolation 例外が発生することです。

手伝ってくれてありがとう。

4

4 に答える 4

3

確かに2 constの場合、変更が許可されていないことを十分に示しているはずです:-)。しかし、真剣に、これらの状態の 1 つはポインターが変更されるべきではないと述べており、もう 1 つはポインターが指すデータが変更されるべきではないと述べています。

そのため、アクセス違反が発生しています。

あなたがする必要があるのは、データをキャストするだけでなく、constがやや少ない別のバッファにコピーすることです。ヒント: Buffer.BlockCopy が最適です。

于 2009-02-09T06:05:30.663 に答える
1

const 修飾子は、データの処理方法に影響を与える可能性がありますが、PInvoke シグネチャには影響しません。buffer パラメーターは整数へのポインターの配列であるため、正しい変換は次のようになります。

IntPtr[] buffer;
于 2009-02-09T08:53:50.180 に答える
0

編集: AccessViolation の例外はありませんが、そのような配列からデータを適切に取得する方法がわかりません。

サンプル ファイルは、このタイプのアクセスを使用しています。

buffer[0][i]
buffer[1][i]

しかし、バッファ[]にはポインタが1つしかありません。そのポインタは 2 次元配列へのポインタですか? それを.NETにマーシャリングする方法は? ありがとう!

于 2009-02-09T15:23:22.833 に答える