C#からDelphiDLLのプロシージャを呼び出そうとしています。このプロシージャは、呼び出し元がを事前に割り当てて入力することを想定しており、その結果を返す手段として要素をarray of array of TSomeRecord
操作します。TSomeRecord
したがって、Xの配列のDelphi動的配列を手作りする必要があります。
ここで、動的配列は動的配列の最初の要素へのポインターで構成され、その最初の要素には参照カウントと長さが含まれていることがわかりましたarray of X
。 (要素の数)先頭に追加された配列(両方とも32ビット整数)、および要素がインラインで連続して格納されるため、全体がメモリ内で次のようになります。
rrrrllll000 ... 000111 ...12..。 ^
rrrrを使用して、参照カウント、llllの長さ、0123の要素、および^ポインターが指す場所。これは裏付けられます。私はそれをテストしました、そしてそれは働きます。多次元動的配列の場合、inの
代わりに使用できると仮定しました。言い換えると、外側の次元は、次のように、動的配列(へのポインター)の動的配列にすぎません。 array of Y
X
array of X
rrrrllll000011112222..。 ^
ここで、要素0000、1111などは、独立して割り当てられた動的配列への32ビットポインタになりました。ただし、このようにすると、問題が発生したためにアクセス違反が発生します。これは明らかに、Delphiが私にそれを期待する方法ではありません。誰かが私にこれを行うことになっている方法を説明できますか?