我仍在尝试使用接口。我实现它们的唯一目的是与在 DLL 中实例化的对象进行交互。当我使用它时,一切正常,所有方法都按预期工作,等等。问题在于清理该接口后面的对象时。
我有一个像这样的简单界面
IMyInterface = interface
['{d52b14f3-156b-4df8-aa16-cb353193d27c}']
procedure Foo;
end;
和一个对象
TMyObject = class(TInterfacedObject, IMyInterface)
private
procedure Foo;
end;
在 DLL 中,我有这个对象的一个全局变量以及两个导出的函数来创建和销毁这个实例
var
_MyObject: TMyObject;
function CreateMyObject: IMyInterface; stdcall;
begin
_MyObject:= TMyObject.Create;
Result:= IMyInterface(_MyObject);
end;
function DestroyMyObject: Integer; stdcall;
begin
_MyObject.Free; // <-- Invalid Pointer Operation
end;
对象的析构函数几乎什么都不做,只是inherited
我仍然有这个问题。但我Invalid Pointer Operation
继续_MyObject.Free
。
我使用LoadLibrary
和GetProcAddress
访问这些导出的方法。
为什么我会得到这个,我该如何解决?