在德尔菲(Delphi)中,与distbinding一起工作的正确方法是正确的?
-
09-10-2019 - |
题
实际上,我在德尔菲(Delphi)中使用后期结合,我需要知道Wich是使用它的正确方法。
我的主要问题是我如何处理这些对象使用的内存,我必须释放内存?
检查此示例代码
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
MyObject:: IDispatch;
begin
try
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr('oleobject.class'), chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, MyObject));
MyObject.Metod1();
MyObject.Metod2();
finally
MyObject:=nil,// is this necesary?
end;
end;
如果有人简要解释如何在此类对象中处理内存,将会有所帮助。
提前致谢。
解决方案
Delphi中的COM接口对象由编译器自动管理。它插入隐藏的呼叫 AddRef
和 Release
在适当的地方,您的界面将自动拥有 Release
当它们走出范围时调用的方法。所以不,你不必 零 删除参考。
其他提示
就像梅森说的那样,界面的记忆由编译器为您管理。但是,StringToolEstr()返回需要使用Sysfreestring()手动释放的分配的BSTR。您应该使用宽阔的类型,该类型为您管理内存,例如:
OleCheck(MkParseDisplayName(BindCtx, PWideChar(WideString('oleobject.class')), chEaten, Moniker));
或者:
var
w: WideString;
w := 'oleobject.class';
OleCheck(MkParseDisplayName(BindCtx, PWideChar(w), chEaten, Moniker));
不隶属于 StackOverflow