我有一个实现接口的类,该类可供插件使用。
类的声明非常简单。整个应用程序只有一个此类的实例。当调用返回接口的函数时,它会在传递结果之前对检索到的接口调用_AddRef。不幸的是,在尝试释放对象(请参见“最终化”部分)时,它会报告无效的指针操作。如果我将其注释掉,则它可以正常工作(但是FastMM报告内存泄漏,因此对象未被释放)。
以下是返回接口的函数中代码的一部分(实际上是我的“ServicesManager”类的重写QueryInterface的一部分)。
ConfigManager类的代码...
以下是返回接口的函数中代码的一部分(实际上是我的“ServicesManager”类的重写QueryInterface的一部分)。
if ConfigManager.GetInterface(IID, obj) then
begin
ISDK_ConfigManager(obj)._AddRef;
result:= 0;
end
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
我做错了什么? 我需要传递一个引用到这个 ConfigManager 实例。