Com+高手请帮忙。(50分)

  • 主题发起人 主题发起人 fly_hong_924
  • 开始时间 开始时间
F

fly_hong_924

Unregistered / Unconfirmed
GUEST, unregistred user!
有一主接口A,其里面有一方法A1;一个子接口B,其有一方法B1;其中A1的返回值是子接口B,请问如何调用子接口B的的方法B1呢?最好给出源码。
 
这个问题的解决关键在于接口B的实现类,该类应该从TAutoIntfObject继承.
type
TMyObject=class(TAutoIntfObject,IMyObject)
protected
{IMyObject}
procedure MethodA;safecall;
procedure MethodB:safecall;
public
constructor Create;reintroduce;
end;

implementation

uses ComServ;

{TMyObject}

constructor TMyObject.Create;
begin
inherited Create(ComServer.TypeLib,IMyObject); //这句非常重要.
...
end;

procedure TMyObject.MethodA;
begin
...
end;

procedure TMyObject.MethodB;
begin
...
end;

end.
 
对Com+不是很了解,能否给我发一个完整的源码。fly_hong@21cn.com 谢了。
 
好像不行啊。inherited Create(ComServer.TypeLib,IMyObject); //这句非常重要.
这句编译通不过……
 
//给你源码,一定要COM+环境:

//主接口A。
unit Unit1;
{$WARN SYMBOL_PLATFORM OFF}

interface

uses
ActiveX, Mtsobj, Mtx, ComObj, Project1_TLB, StdVcl, Dialogs;

type
TA = class(TMtsAutoObject, IA)
protected
function A1: WideString; safecall;
end;

implementation

uses ComServ, Unit2;

function TA.A1: WideString;
var
Fb: IB;
begin
OleCheck(ObjectContext.CreateInstance(CLASS_B, IID_IB, Fb));
try
ShowMessage(Fb.B1);
finally
Fb := nil;
end;
end;

initialization
TAutoObjectFactory.Create(ComServer, TA, Class_A,
ciMultiInstance, tmApartment);
end.

//子接口B。
unit Unit2;
{$WARN SYMBOL_PLATFORM OFF}

interface

uses
ActiveX, Mtsobj, Mtx, ComObj, Project1_TLB, StdVcl;

type
TB = class(TMtsAutoObject, IB)
protected
function B1: WideString; safecall;
end;

implementation

uses ComServ;

function TB.B1: WideString;
begin
Result := 'B';
end;

initialization
TAutoObjectFactory.Create(ComServer, TB, Class_B,
ciMultiInstance, tmApartment);
end.
 
我已经解决了多接口的问题,有一个问题不明,就是我的子接口里面的方法如何给别人去调用?我做这个接口是给别人的程序去调用,而不是我自己用。来者有分……
 
不太明白你说的问题是什么?B接口是不是继承自A接口?COM+对象实现了A接口而又想把B接口提供给客户用,是这样的问题吗?
 
对,就是B接口里的方法给别人去调用。
 
不是太明白你说的
假如一个实现类,两个接口:
你要是把一个接口定义为default
那么量一个接口对象直接创建就不行
因为它默认第一个接口必须
t1: 默认接口;
t2:另一个接口;
begin
t1:=实现类.create;
t1.方法;//可以用
//用接口2方法
t1.QueryInterface(第2个就口guid;t2);
t2.方法;//这时间可以用;
end;
 
呵呵,发现我还有个问题没有搞清楚,借个位置学习一下。
我定义了一个COM接口,在这个COM接口下面定义多个接口
COMA_ (COM接口)
|_sub_a (子接口)
|_sub_b (子接口)
两个子接口里面定义的方法可以互相调用吗?有效吗?
 
to fly2003我也是采用你那样的方法来实现。问题是要引用那个单元才行。别人的程序不可能引用我这个单元的阿。多来人讨论,反正我这个分就是你们的了。
 
李维那不是有几本好书吗?你可以好好看看呀
 
fly_hong_924: 你是说引用你的tlb 吧,要是不引用怎么能用你类库的方法。你想别人怎么用你的???
 
后期绑定是指的这种情况吧!. 用 B类 强制转换 这个接口 就可以按照 B类的方法调用了
对吧!
 
你应该用COM对象实现B接口,因为B接口继承了A接口,所以当客户取得COM对象返回的A接口时,就可以用 A as B 取得B接口。
 
To wangzai6280 能具体点吗?最好给出调用时的源码。
 
后退
顶部