在Delphi中如何实现COM的聚合(100分)

  • 主题发起人 主题发起人 zhj_nc
  • 开始时间 开始时间
Z

zhj_nc

Unregistered / Unconfirmed
GUEST, unregistred user!
我看见有个CreateAggregated,不知该怎样用,请高手指点
 
为什么没人回答,难道你们在Delphi中用COM开发,不用聚合吗?
 
我也想知道答案
 
请问楼主,什么叫“COM的聚合”?
 
终于有高手发话。
TO csz: 我想您应该知道我的意思,即使我的表述不准确。为了对各位高手的尊重,我重新表达一下:
在COM中,可以使用包容和聚合来改造组件。我看了《INSIDE COM》对聚合有了初步的理解。我想请问在DELPHI中如何实现,我想不应该是我把《INSIDE COM》里的办法,翻译成DELPHI吧。
 
聚和只能手工写代码的,看看TAggregatedObject的帮助吧
在delphi sources 中AxCtrls单元内有一个例子,看看有帮助的,具体的我也没作过,
只是前两天有人问,研究了一下,后来没时间了就放下了。
 
我是来学习的:)
 
我倒是会直接用interface实现聚合
IMyInterface=interface
['{2E173B2D-6BE9-4519-8E5F-6DEF400335EC}']
function SayHello:string;
end;
IMyInterface2=interface
['{3FD6CFDF-E028-4FD6-9834-299404C15FFF}']
function SayHello2:string;
end;
TMyObject2=class(TInterfacedObject,IMyInterface2)
function SayHello2:string;
end;
TMyObject=class(TInterfacedObject,IMyInterface,IMyInterface2)
private
FDelgateObj:IMyInterface2;
public
property DelgateObj:IMyInterface2 read FDelgateObj write FDelgateObj implements IMyInterface2;
constructor Create;
function SayHello:string;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TMyObject.Create;
begin
FDelgateObj:=Nil;
end;
function TMyObject2.SayHello2:string;
begin
Result:='I am Object2';
end;
function TMyObject.SayHello:string;
begin
Result:='I am Object1';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyObject:TMyObject;
MyObject2:TMyObject2;
Intf1:IMyInterface;
Intf2:IMyInterface2;
begin
MyObject:=TMyObject.Create;
MyObject.FDelgateObj:=TMyObject2.Create;
if Supports(MyObject,IMyInterface,Intf1) then
ShowMessage(Intf1.SayHello);
if Supports(MyObject,IMyInterface2,Intf2) then
ShowMessage(Intf2.SayHello2);
end;
 
to shiningplus:
谢谢您的指点,但我认为你给的代码并不是说明COM的聚合。可能是接口的聚合(我不清楚)。
我查了许多资料,快成功了。接口已经可以暴露出来,外部接口和内部接口可以互相QueryInterface。(《Inside COM》的观点已经接近成功了),其实已基本实现。只不过不直观。我想知道如何才能不内部接口的方法暴露出来呢?如果方法不能暴露,我自己用无所谓,别人怎么知道,我到底实现了哪些方法呢?
请高手指点!!!!!!!!!!!!!!!!!
 
我没有权利发言,在此借宝地一用
我用Delhi6 写的一个组件,在Delphi中我定义了一个接口函数
函数原形如下:
function ExceSqlC(Str: OleVariant): OLE_CANCELBOOL;
stdcall;
function FieldC(N: Int64): OleVariant;
stdcall;

而我在VB中引入 组件,调用function ExceSqlC 无误,而调用
Fieldc 函数,“提示函数标记为受限制的,或使用了 Visual Basic 不支持的类型”
该如何改写COM组件呢,高手指点迷津
 
COM的聚合,我怎么都没有用过,楼主可不可以说一下,你在哪里用到这个,最好举个例子行吗?
 
TMD
写了一堆全丢了
气死人
 
[blue][/blue]gggggggggggggggg[:D]
 
标准的COM 是不支持INT64 的数据类型的
所以VB中不能用
聚合COM刚才写了一堆 全丢了 也不想写了

真是烂[:(][:(][:(][:(]
 
和COM打交道,靠的就是接口,
所以COM的聚合,指得就是接口的聚合,
通过任何一个接口可以查询到其他所有此对象支持的接口
 
多人接受答案了。
 
后退
顶部