3

实际上我在delphi中使用后期绑定,我需要知道使用它的正确方法。

我主要关心的是如何处理这些对象使用的内存,我必须释放内存吗?

检查此示例代码

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;

如果有人简要解释如何处理此类对象中的内存,将会很有帮助。

提前致谢。

4

2 回答 2

3

Delphi 中的 COM 接口对象由编译器自动管理。它将隐藏调用插入到适当的位置,AddRef并且当它们超出范围时Release,您的接口将自动调用它们的方法。Release所以不,您不必取消参考。

于 2010-10-21T01:14:33.587 回答
0

正如 Mason 所说,接口的内存由编译器为您管理。但是,StringToOleStr() 返回一个分配的 BSTR,需要使用 SysFreeString() 手动释放。您应该改用 WideString 类型,它为您管理内存,例如:

OleCheck(MkParseDisplayName(BindCtx, PWideChar(WideString('oleobject.class')), chEaten, Moniker)); 

或者:

var
  w: WideString;

w := 'oleobject.class';
OleCheck(MkParseDisplayName(BindCtx, PWideChar(w), chEaten, Moniker)); 
于 2010-10-21T19:49:00.763 回答