实际上,我在德尔菲(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接口对象由编译器自动管理。它插入隐藏的呼叫 AddRefRelease 在适当的地方,您的界面将自动拥有 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)); 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top