ATL 基于ACE写的IE插件在自动化接口方法中启动了一新线程(调用继承自ace_task中的activate方法), 正常情况应该调用svc运行ACE_Reactor::instance ()->run_reactor_event_loop (),这段程序在EXE中没问题,在简单封装了com接口后用JS和VB调用都出现内存不能read, debug发现由于新线程刚启动就退出了 是不是com规范对新线程有什么要求???? 是不是com规范对新起线程有什么要求????大吓过来帮下忙 折腾三天了 所有俺能想的可能性都没成功 杯具  崩溃啊!!!!!!!!!

解决方案 »

  1.   

    接口跨线程调用需要列集和散集
    CoMarshalInterThreadInterfaceInStream
    CoGetInterfaceAndReleaseStream
      

  2.   

    这位兄弟 外部程序是单线程调用 是COM组件部分新起一线程的问题
      

  3.   

    我知道,外部程序调用你的COM组件,而你的COM组件内部创建了一个线程,这个线程又调用了某些组件相关的接口。你按照我上给你给的关键字google一下再说
      

  4.   


    好的 谢谢 这个新线程没有调用其它和自身com接口,只是内部类的方法 有关系吗?
      

  5.   


    内部类没有调用com接口啊 是ACE的一些库 放在exe中都没有问题 在com中线程刚起就退出了 奇怪啊
      

  6.   

    线程退出是否有Error Code,GetLastError等是否返回什么,线程函数在什么位置退出的
      

  7.   

    创建线程的函数被封装了ACE的动态库中, ACE创建线程的上层接口函数正常返回,没有错误, 线程回调函数是死循环,正常不会退出,用EXE调用都正常。有没有可能和线程回调函数有关系  com对内部线程回调函数有要求吗?????
      

  8.   

    ace.dll文件放到system32文件夹试一试。