包内存管理

时间:2010-02-22 08:46:59

标签: delphi memory-management packages

由于我在尝试使用DLL时遇到了很多困难,因此我决定尝试运行时包(主要是为了避免内存管理器和类型注册表问题)。

从我的应用程序中我做了类似的事情:

HandleList := TList <THandle>.Create;
try
  PackageObj.DoSomething (HandleList);
finally
  FreeAndNil (HandleList);
end;

该方法(在运行时包内)只是在列表中添加了一些内容:

procedure TPackageObject.DoSomething (HandleList: TList <THandle>);
begin
  HandleList.Clear;
  HandleList.Add (0);
end;

我在包中的Invalid Pointer调用或应用程序中对Clear的调用中得到FreeAndNil异常。访问违规也时有发生。

使用FastMM时,有时会报告“Block Header已损坏”。

当分配或释放内存时,总是会发生错误,即向列表添加内容,从而导致列表动态增长。

HandleList对象传递给包的方式是否正常?有关包和内存管理的重要信息吗?或者错误必须在其他地方?

编辑如果错误可能在其他地方,我该如何调试这样的东西?任何经历?

1 个答案:

答案 0 :(得分:3)

我猜你在不同的软件包中编译相同的代码,也许在应用程序可执行文件中。无论是静态链接运行时包(在项目选项中列出它们)还是动态链接(使用LoadPackage),每个单元都必须只链接到一个模块,否则会出现重复的代码冲突。检查包依赖项(requires子句),主项目选项中的运行时包列表,监视有关隐式包含单元的编译器警告。