私はC#からDelphi DLLのプロシージャを呼び出そうとしています。このプロシージャは、呼び出し側が事前に割り当ててarray of array of TSomeRecord
を入力することを前提としています。その結果、結果を返す手段としてTSomeRecord
要素を操作します。したがって、私は、Xの配列のデルファイ動的配列を手にする必要があります
ここで、I have found here動的array of X
は、動的配列の最初の要素へのポインタで構成され、最初の要素は参照カウントと長さ全部がメモリ内に次のように見えるように、要素は、インラインと連続して格納され、その付加配列の(32ビット整数)(要素の数):参照カウントRRRRとXの動的配列のDelphi動的配列のメモリレイアウトとは何ですか?
rrrrllll000...000111...12... ^
長さはllll、要素は0123、ポインタが指す場所は^です。これは傷つきます。私はそれを試して、それは動作します。
rrrrllll000011112222... ^
:外寸法は、単に(へのポインタ)は等ダイナミックアレイの動的配列である私は、他の言葉で、array of X
でX
ためarray of Y
を置換することができると仮定した多次元動的配列のため
ここで、要素0000,1111などは、独立に割り当てられた動的配列に対する32ビットポインタとなります。しかし、このようにすると、私のトラブルのアクセス違反が発生します。これは明らかに、デルファイが私にそれを期待している方法ではありません。誰も私にどのように説明することができますははこれを行う予定ですか?
あなたの答えをありがとう。私はこれが(例)コードで診断する方が簡単かもしれないことに気付いていますが、私には何もありません。プロシージャの署名のみ。 DLLはサードパーティのブラックボックスです。 –
それから、私が与えることができる唯一のアドバイスは、誰でも割り振る者がDelphiデルファイでDLLを割り当て解除するか、またはラップする必要があるという原則に固執することです。インターフェイスから自動化されたタイプを削除するexe(comserver)またはdll最初に –