在Delphi中怎样写出既可被聚合,又可以独立使用的com对象? (50分)

  • 主题发起人 主题发起人 Treeland
  • 开始时间 开始时间
T

Treeland

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,我刚来大富翁不久,所以没有很多的可用分,因此只能是吝啬了一点(只有50分)。但
我实在想知道这个问题的解决方案(在vc里用atl好象可以比较容易地解决,但是我看了一
些Delphi的相关资料,对这个问题提及的似乎很少)。请各位高手指教!!!
 
各位大侠,帮帮忙!!
 
各位,帮忙顶一下也好啊!!
 
是不是我的问题问的太傻,或者因为分太少~~~~~~~~~~~~~~~~~~~~~
 
这里的斑竹在吗?帮忙看看这个问题。我这个帖子已经放了两天了,怎么还是没有人来?
真的我出的分太少了。如果真是这样的话,那我可以再加分的。
 
在automation里,没人回答我的问题。到这里看看!!
 
我的问题是傻。
我自己已解决。想问一上版主,我如何才能收回这帖子的分数。
 
可以解决这个问题,如果一个COM对象能自动聚合或独立的话,
一般是要创建一个能使用参数(聚合的COM对象接口IUuknown)构照函数;
如下:
TOneCom = Class (TAutoObject,IOneInterface)
private
Fintf: IUnknown;
protected
function QueryInterface(....)//参看IUnknown的QueryInterface,
public
Constructor Create(pUnk: IUnknown);
end;

Constructor TOneCom.Create(pUnk: IUnknown);
begin
FIntf:=pUnk;
end;

//缺省的代码自己补吧
function TOneCom.QueryInterface(....)
begin
//聚合方式
if Fintf<>nil then

if 查找的是IUnknown接口 then
Return:=Fintf;
Exit;
end;
if 查找的是IOne接口 then
Return:=Self as IOne;
exit;
end;
result:=FIntf.QueryInterface(...);
exit;
end;
//无聚合方式
if 要查找IOne or IUnknown then

Return:=FOne;
exit;
end;

end;

TTwoCom=(TAutoObject, ITwo)
private
FOne: IOne;
protected
function QueryInterface(...);
public
procedure initiaze;
override;
end;

Procedure TTwoCom.initiaze;
begin
inherited initiaze;

FOne:=IOne(TOneCOm.Create(Self as IUnknown));
// FOne._AddRef;
如果程序有错的话,补充这句.记不太清了.
end;

function TTwoCom.QueryInterface(...)
begin
if 要查找IOne then

Return:=FOne;
exit;
end;
//其他按正常返回
if 要查找ITwo or IUnknown then

Return:=Self as ITwo;
end;

end;

end;

大概思路如此.
 
后退
顶部