首页 文章

从Dll返回TCollection或对象数组

提问于
浏览
2

我试图从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;

如果我用而不是 Setlength(MyObjectArray, 0) and MyObjectArray := nil,
提出了 FreeAndNil(MyObjectArray) 异常 .

有什么建议吗?

1 回答

  • 6

    ShareMem是所有Delphi DLL和EXE项目文件中的第一个单元吗? FastMM已经是过去几个Delphi版本的RTL内存管理器 .

    我建议不要在DLL和EXE之间共享对象;这只是一种痛苦的方法 . 请改用包 .

    如果你必须使用DLL,我建议采用通常的WinAPI约定:stdcall调用约定,只使用C兼容的数据类型(整数,浮点数,指针,没有托管类型字段的记录,如字符串,数组或接口) . 让DLL不分配EXE负责释放的内存 . 相反,让EXE分配并传递DLL内存;或者,将分配封装到逻辑句柄中,并从DLL导出处理存储器的函数,例如, CloseHandle WinAPI函数如何工作 .

相关问题