none
html网页调用进程内组件,进程内组件又调用一个进程外组件的问题 RRS feed

  • 问题

  • 我做了一个进程外组件com1(.exe);

    又做了一个进程内组件com2(.dll),class ATL_NO_TABLE Cplugin:public CComObjectRootEx<CComSingleThreadModel>,应该是单线程的吧;它负责创建com1组件对象。

    还有一个测试网页html,使用<object>标签来加载com2组件对象;

    其实就是html创建com2对象,并调用com2对象提供的接口函数;com2组件呢,又创建com1对象,并调用com1对象提供的接口函数;这是一个正向的调用关系;

    还有一个反向的调用关系,就是:点击com1组件的关闭button,通过连接点,通知com2组件;com2组件接收到关闭事件后,立即又通过连接点,通知html,html在接收到关闭事件后,执行事件响应函数。特别的地方是,在com1组件中点击关闭button时,需要com2组件释放掉com1组件对象(因为是com2创建的com1对象),但是在连接点实现的过程中是不能释放任何com对象的,否则连接点栈就出问题了。所以我想了一个办法,在com2组件中,在触发关闭事件末尾里,设置一个全局变量bClose = true;然后在线程中,if(bClose),就释放掉com1对象。

    我想问的是,1.这样的处理办法是否得当?2.好像在其他线程里不能直接使用com对象提供的接口函数,需要列集和散集,具体怎么做?我试了一下,好像释放不掉com1对象,有代码参考就更好了。

    多谢老师们的指点!

    2014年12月22日 6:38

全部回复