X的动态数组的Delphi动态数组的内存布局是什么?
发布时间:2020-12-15 09:33:07 所属栏目:大数据 来源:网络整理
导读:我试图从C#调用Delphi DLL中的过程.该过程期望调用者预分配并输入TSomeRecord数组的数组,然后它将操作TSomeRecord元素作为返回结果的方法.所以,我需要手工制作Delphi数组的动态数组. 现在,I have found here,X的动态数组由指向动态数组的第一个元素的指针组
我试图从C#调用Delphi DLL中的过程.该过程期望调用者预分配并输入TSomeRecord数组的数组,然后它将操作TSomeRecord元素作为返回结果的方法.所以,我需要手工制作Delphi数组的动态数组.
现在,I have found here,X的动态数组由指向动态数组的第一个元素的指针组成,并且第一个元素具有引用计数和前面的数组的长度(元素数)(两个32位整数),并且元素是内联和连续存储的,因此整个内容在内存中看起来像这样: rrrrllll000...000111...12... ^ rrrr是引用计数,llll是长度,0123是元素,^是指针指向的位置.这证明了;我测试了它,它的工作原理. rrrrllll000011112222... ^ 其中元素0000,1111等现在是独立分配的动态数组的32位指针.但是,这样做会让我遇到麻烦的访问权限.这显然不是德尔福希望我这样做的方式.任何人都可以向我解释我应该如何做到这一点? 解决方法
动态数组是指向打包的元素块的指针.
因此TSomeRecord数组的数组是指向指针数组的指针,每个指针指向具有length(array [firstlevel])元素的块内存,如果没有则指向nil. 换句话说,你假设大致是正确的,并且添加了零元素的数组是零.请注意,除非您真的知道自己在做什么,否则不应该自己更改引用计数和长度. 如果没有示例代码,确定导致崩溃的原因将很困难.请记住,对于所有自动Delphi类型(宽字符串除外),所有动态内存必须由delphi内存管理器分配. 尝试使用您正在连接的任何语言的内存管理器是不可能的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |