首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中使用LateBinding的正确方法是什么?

在Delphi中使用LateBinding的正确方法是什么?
EN

Stack Overflow用户
提问于 2010-10-21 09:02:02
回答 2查看 405关注 0票数 3

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

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

检查此示例代码

代码语言:javascript
复制
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;

如果有人简要地解释一下在这种类型的对象中是如何处理内存的,那将是有帮助的。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-21 09:14:34

Delphi中的COM接口对象由编译器自动管理。它在适当的位置插入对AddRefRelease的隐藏调用,当它们超出范围时,您的接口将自动调用它们的Release方法。所以不,你不需要nil去掉引用。

票数 3
EN

Stack Overflow用户

发布于 2010-10-22 03:49:01

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

代码语言:javascript
复制
OleCheck(MkParseDisplayName(BindCtx, PWideChar(WideString('oleobject.class')), chEaten, Moniker)); 

或者:

代码语言:javascript
复制
var
  w: WideString;

w := 'oleobject.class';
OleCheck(MkParseDisplayName(BindCtx, PWideChar(w), chEaten, Moniker)); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3983526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档