接口 相互引用 怎么办?

cdwy411 2004-04-07 09:20:13
接口 1 的一个 函数 要 用 到 接口2 的 指针 ,
接口2 的一个函数 要用到 接口1 的指针 ,
接口2 和 接口 1 都在同一个 IDL 文件中 ,这种 相互引用 怎么解决 ?
...全文
53 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天限天空 2004-04-11
  • 打赏
  • 举报
回复
稍微大一点的系统中,常会出现交叉引用的情况

eastsun 2004-04-11
  • 打赏
  • 举报
回复

部分同意newkey007(无限天空) 和top_hipster(top_hipster) 所说的实现办法!

另可见《COM本质论>>.

//////////////////////
改用传IID吧!
在函数内部在QueryInerface
也是一种方法。
/////////////////////////
还有一个办法就是类似于C++中的void*的做法,互相传IUNKOWN来变通一下。

/////////////////////////
COM的初学者,随便说说。

不过我觉得,人们要用COM的理由就是去掉过多的耦合,尤其是去循环依赖(COM设计者就是依据这个想法来构造COM的)。你这样写也许可以有各种方法实现,但在设计方案的时候已经先输掉了一大块。——因为你这个恰恰就是一个循环依赖。我认为最好的办法是改进你的设计先。

wangweixing2000 2004-04-09
  • 打赏
  • 举报
回复
同意newkey007(无限天空) 和top_hipster(top_hipster) 所说!
top_hipster 2004-04-08
  • 打赏
  • 举报
回复
是否可以象类的声明一样,先声明一次
interface A2;

interface A1{

}



interface A2{

}
cdwy411 2004-04-08
  • 打赏
  • 举报
回复
关键是我定义 时就出错, 因为在IDL 中总得有个先后,而前面的又不能用到后面的
接口 定义,但同时后面的也需要用前面的接口定义
就像文件互包含一样,
不知道怎么解决?
zhujianping_es 2004-04-07
  • 打赏
  • 举报
回复
改用传IID吧!
在函数内部在QueryInerface
天限天空 2004-04-07
  • 打赏
  • 举报
回复
显示的释放一次

Interface1.Detach()
{
if(Interface2)
{
Interface2.Release();
Interface2 = NULL;
}
....
}


Interface2.Detach()
{
if(Interface1)
{
Interface1.Release();
Interface1 = NULL;
}
....
}

外面在释放这2个接口前,先调用 Interface.Detach()

3,248

社区成员

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

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