实际上,我在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;如果有人简要地解释一下在这种类型的对象中是如何处理内存的,那将是有帮助的。
提前谢谢。
发布于 2010-10-21 09:14:34
Delphi中的COM接口对象由编译器自动管理。它在适当的位置插入对AddRef和Release的隐藏调用,当它们超出范围时,您的接口将自动调用它们的Release方法。所以不,你不需要nil去掉引用。
发布于 2010-10-22 03:49:01
正如Mason所说,接口的内存是由编译器为您管理的。但是,StringToOleStr()返回需要使用SysFreeString()手动释放的已分配BSTR。您应该改用WideString类型,它为您管理内存,例如:
OleCheck(MkParseDisplayName(BindCtx, PWideChar(WideString('oleobject.class')), chEaten, Moniker)); 或者:
var
w: WideString;
w := 'oleobject.class';
OleCheck(MkParseDisplayName(BindCtx, PWideChar(w), chEaten, Moniker)); https://stackoverflow.com/questions/3983526
复制相似问题