用ATL建立一个single模型的组件,组件有一方法fun,有一事件MyEvent,用vb调用fun,在Fun中建立一个额外的线程,再在线程中Fire_MyEvent。结果在vb调试时期运行正常,但执行编译之后的程序却发生非法访问,不是到底是什么原因。
   这个例子我只是用来测试一下在single模型中用线程的情况(明知不是正确的运用),高手能否解答一下错误发生的原因。

解决方案 »

  1.   

    在额外的线程里面也初始化COM库。线程函数开头调用
    CoInitializeEx(NULL, COINIT_MULTITHREADED)。如果编译报CoInitializeEx没有找到,则在文件中定义
    #defined _ATL_FREE_THREADED
      

  2.   

    ultralzl你可能把我的问题看错了,我在组件的fun方法中建立新的线程,同时把this指针当错线程的参数传过去,然后在新的线程中通过穿过来的this调用Fire_MyEvent。
    为什么在VB调试过程中不报错,但在编译后的程序中却发生非法地址的访问。