相关疑难解决方法(0)

Delphi7,传递对象的接口 - 在释放对象时导致无效的指针操作

我有一个实现接口的类,它可用于插件.课堂宣言很简单.整个应用程序只有一个此类的实例.当调用返回接口的函数时,它会在检索到的接口上调用_AddRef,然后再将其作为结果传回.不幸的是,它一直有效,直到我尝试释放对象(参见"终结"部分) - 它报告无效的指针操作.如果我将其注释掉,它可以正常工作(但是FastMM报告内存泄漏,因此对象没有被释放).

这是函数中返回接口的部分代码(实际上它是我的"ServicesManager"类的重写的QueryInterface).

if ConfigManager.GetInterface(IID, obj) then
begin
  ISDK_ConfigManager(obj)._AddRef;
  result:= 0;
end
Run Code Online (Sandbox Code Playgroud)

和ConfigManager类的代码......

type
  TConfigManager = class(TInterfacedObject, ISDK_ConfigManager)
  private
  ... 
  end;

var
  ConfigManager: TConfigManager;
implementation

...

initialization
  ConfigManager:= TConfigManager.Create();
finalization
  if ConfigManager <> nil then
    FreeAndNil(ConfigManager); //if I comment it out, it leaks the memory but no Invalid Ptr. Op. raises
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我需要传递一个对ConfigManager 这个实例的引用.

delphi pointers interface

3
推荐指数
1
解决办法
2089
查看次数

标签 统计

delphi ×1

interface ×1

pointers ×1