关于COM接口引用计数的问题?(0分)

  • 主题发起人 主题发起人 wodesnake
  • 开始时间 开始时间
W

wodesnake

Unregistered / Unconfirmed
GUEST, unregistred user!
看到一本有关COM接口的书,对接口引用计数在什么时候自动加1和减1有些地方不太明白。
下面是我看的书上的范例:
procedure DoSomethingwithInterface(Int:IformattedNumber);
begin
Showmessage(Int.FormatteString);//FormatteString是接口中定义的方法
end;

procedure Tfrom1.Button1Click(Sender:Tobject);
var FormatNum:TformattedNumber;//实现接口IformattedNumber的类
begin
FormatNum:=TformattedNumber.create(12);
DoSomeThingWithInterFace(FormatNum As IformattedNumber);
FormatNum.SetValue(20);//TformattedNumber中定义的方法,并非接口中的方法
end;

其中TformattedNumber是实现IformattedNumber的类,FormatNum.SetValue是类
TformattedNumber中自定义的方法,FormatteString是接口中定义的方法。
我看的那本书上说调用DoSomethingWithInterface过程获取了一个
IformattedNumber接口,Delphi在该过程调用之前自动调用AddRef函数,引用计数自动加1,在函数调用返回时,自动调用Release函数,引用计数减1变为0,这样对象在进程中自动销毁,所以FormatNum现在成了一个不合法的对象,任何对它的应用将会引起冲突。

我想问的就是FormatNum as IformattedNumber这句会使接口的引用计数加1吗?然后在过程调用参数传值时(也就是FormatNum As IformattedNumber的值传给过程
DoSomethingWithInterface的参数intf时),接口的引用计数也会加1吗?我实在不太明白接口的引用计数会在什么时候加1呢?还有如果上面那个过程是变参的话,又会是什么情况呢?

请大家帮忙,本人太菜了!!!!!!!!!
 
后退
顶部