COM组件调用组件的问题

AdrianLY 2009-11-10 02:56:43
A和B两个组件,各有一个接口:IA1和IB1,其中IB1的一个方法Bfun的返回参数类型为IA1,也就是说IB1调用了IA1接口
然后有一个C#写的调用组件的demo

demo中,我只引用了B.dll,然后在调用IB1的方法Bfun时,需要返回一个IA1类型的参数,这个参数我通过B组件就可以声明了!这样是不是不对?

问题有3个:
1、demo中,如果只引用B.dll后,是不是只能看到B的接口,看不到A的接口?
2、demo中,如果需要定义接口IA1,是不是必须要把A.dll引用进来,然后using ALib; 然后再声明一个接口对象?
3、组件代码中,组件B在引用A的接口时,该如何引用呢?就是在B的idl文件中该如何写呢?

多谢多谢啦!
...全文
92 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
AdrianLY 2009-11-10
  • 打赏
  • 举报
回复
能否以代码举例子说明下通过B声明IA1接口和直接声明IA1接口?
AdrianLY 2009-11-10
  • 打赏
  • 举报
回复
哦,对啦,那通过B声明的IA1接口和直接声明的IA1接口,在一个文件中使用时,会不会有什么冲突呢?

好的,多谢多谢啊!
今天的加上昨天的,一并感谢你啊!

顺便问下:csdn中可不可以追加分数?我想多给你点分!呵呵
雪影 2009-11-10
  • 打赏
  • 举报
回复
显然你属于直接通过A控件来使用IA1接口,所以必须将A.dll引入进来.
雪影 2009-11-10
  • 打赏
  • 举报
回复
你要想直接使用IA1接口就必须将A.dll引入进来.
如果是通过BFun函数来获取IAl接口,就不必将A.dll引入进来
AdrianLY 2009-11-10
  • 打赏
  • 举报
回复
刚才和同事说了半天,他也不是很清楚!
我现在的问题就是,想直接声明一个IA1接口的对象,然后直接调里面的方法,可是我这样写时:IA1 test = new IA1();无论放到哪都会提示错误 CS0144: 无法创建抽象类或接口“ALib.IA1”的实例。
你说这是什么原因?

再次感谢啊!
雪影 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 adrianly 的回复:]
1、首先我想弄明白的是,通过B组件来调用A组件中的接口,对不对呢?
    B中的接口IB1的Bfun方法返回类型IA1,不是IUnknown。我在C#的demo中调该b组件的接口方法时,我必须先定义一个类型为IA1的变量test1,然后test1 = IB1.Bfun();这个test1是通过B组件来声明的,因为我并没有引入一个A.dll
对,可以这么理解,在B.dll类型库中应该已经包含了IA1接口的定义
2、现在我要直接new一个类型为IA1的对象,是不是需要把A.dll引入进来?
不需要,你已经将A组件聚合到B.dll中了,你在调用BFun时已经创建了一个A组件对象,并通过BFun输出参数向外提供了IA1接口

PS:昨天的问题,也是你回答的,多谢多谢啊!

[/Quote]
AdrianLY 2009-11-10
  • 打赏
  • 举报
回复
1、首先我想弄明白的是,通过B组件来调用A组件中的接口,对不对呢?
B中的接口IB1的Bfun方法返回类型IA1,不是IUnknown。我在C#的demo中调该b组件的接口方法时,我必须先定义一个类型为IA1的变量test1,然后test1 = IB1.Bfun();这个test1是通过B组件来声明的,因为我并没有引入一个A.dll
2、现在我要直接new一个类型为IA1的对象,是不是需要把A.dll引入进来?

PS:昨天的问题,也是你回答的,多谢多谢啊!
雪影 2009-11-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 adrianly 的回复:]
A和B两个组件,各有一个接口:IA1和IB1,其中IB1的一个方法Bfun的返回参数类型为IA1,也就是说IB1调用了IA1接口
然后有一个C#写的调用组件的demo

demo中,我只引用了B.dll,然后在调用IB1的方法Bfun时,需要返回一个IA1类型的参数,这个参数我通过B组件就可以声明了!这样是不是不对?

问题有3个:
1、如果只引用B.dll后,是不是只能看到B的接口,看不到A的接口?
这个得看你是如何定义Bfun方法而定,如果Bfun输出参数为IUnknown,那么B.dll的类型库中可能不包含A接口的信息.
2、如果需要定义接口IA1,是不是必须要把A.dll引用进来,然后using ALib; 然后再声明一个接口对象?
如果B类型库中不包含A接口的定义,则需要这个步骤,只需要将A的类型库定义#import进来即可
3、组件代码中,组件B在引用A的接口时,该如何引用呢?就是在B的idl文件中该如何写呢?
这个和操作普通接口没什么不同,你可以在B的idl文件中将A的idl文件import进来即可,这样B.dll类型库也包含了A的接口定义信息

多谢多谢啦!
[/Quote]

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧