我想從C#中調用Delphi DLL中的過程。該過程期望調用者預先分配並輸入array of array of TSomeRecord
,然後它將操縱TSomeRecord
元素作爲返回結果的手段。所以,我需要手工製作動態數組的動態數組X.
現在,I have found here一個動態的array of X
由一個指向動態數組的第一個元素的指針組成,並且第一個元素有一個引用計數和長度預先考慮所述陣列的(32位整數),並且該元素被內聯和連續存儲的,使整個東西看起來像這樣在存儲器(元素的數量):什麼是動態數組X的Delphi動態數組的內存佈局?
rrrrllll000...000111...12... ^
與RRRR參考計數,llll長度,0123元素,以及^指針指向的地方。這顯示出來;我已經測試過它,它工作。
對於多維動態數組我假定我可以替代array of Y
在array of X
的X
,換句話說,所述外尺寸是簡單地(指針)動態數組,像這樣的動態數組:
rrrrllll000011112222... ^
其中元素0000,1111等現在是指向獨立分配的動態數組的32位指針。然而,這樣做會使我的麻煩遭到侵犯。這顯然不是德爾福如何期望我做到的。任何人都可以向我解釋我如何上午應該這樣做?
感謝您的回答。我意識到這可能更容易診斷(示例)代碼,但我沒有;只有程序的簽名。該DLL是第三方黑匣子。 – 2009-10-05 11:14:14
然後,我可以給你的唯一建議是堅持這樣一個原則,即誰分配也必須釋放,或在德爾福Delphi包裝DLL。exe(comserver)或dll首先從界面中刪除自動化類型 – 2009-10-05 11:48:13