我正在尝试从 C# 调用 Delphi DLL 中的过程。该过程期望调用者预先分配并输入一个array of array of TSomeRecord
,然后它将操作其中的TSomeRecord
元素作为返回结果的一种方式。所以,我需要手工制作 X 数组的 Delphi 动态数组。
现在,我在这里发现动态array of X
由指向动态数组的第一个元素的指针组成,并且该第一个元素具有引用计数和长度(元素的数量)数组的前置(都是 32 位整数),并且元素是内联和连续存储的,所以整个事情在内存中看起来像这样:
rrrrllll000...000111...12... ^
rrrr 是引用计数,llll 是长度,0123 是元素,而 ^ 是指针指向的位置。这证明了;我已经对其进行了测试,并且可以正常工作。
对于多维动态数组,我假设我可以替换array of Y
in X
,array of X
换句话说,外部维度只是动态数组(指向)的动态数组,如下所示:
rrrrllll000011112222... ^
其中元素 0000、1111 等现在是指向独立分配的动态数组的 32 位指针。但是,这样做会因为我的麻烦而导致访问冲突。这显然不是 Delphi 期望我做的。谁能向我解释我应该怎么做?