Pet*_*ter 2 arrays delphi dll dynamic tcollection
我试图从dll函数返回我自己的对象(从TCollection派生).我使用FastMemoryManager,但没有成功......所以我试图返回一些对象的动态数组.
当前在dll函数中的数组的长度.它工作得很好,但是没有释放分配的内存.
(我用Windows tarsk经理测量).是否有可能如何释放动态数组?调用dll函数的过程在线程中,最后我有以下内容:
for i := 0 to length(MyObjectArray) - 1 do begin
if MyObjectArray[i] <> nil then
MyObjectArray[i].Free;
end;
Setlength(MyObjectArray, 0);
MyObjectArray := nil;
Run Code Online (Sandbox Code Playgroud)
如果我使用而不是Setlength(MyObjectArray,0)和MyObjectArray:= nil,则
引发FreeAndNil(MyObjectArray) 异常.
有什么建议吗?
ShareMem是所有Delphi DLL和EXE项目文件中的第一个单元吗?FastMM已经是过去几个Delphi版本的RTL内存管理器.
我建议不要在DLL和EXE之间共享对象; 这只是一种痛苦的方法.请改用包.
如果你必须使用DLL,我建议采用通常的WinAPI约定:stdcall调用约定,只使用C兼容的数据类型(整数,浮点数,指针,没有托管类型字段的记录,如字符串,数组或接口).让DLL不分配EXE负责释放的内存.相反,让EXE分配并传递DLL内存; 或者,将分配封装到逻辑句柄中,并从DLL中导出处理内存的函数,例如CloseHandleWinAPI函数的工作方式.