在DLL中创建COM对象不成功,在EXE中创建能够成功,COM对象是用ATL实现的自动化对象,是一个DLL,已经在注册表中注册。
hr = ::CoCreateInstance (CLSID_Interface, NULL, CLSCTX_INPROC_HANDLER  , 
IID_IInterface, (void **) &g_pViaIf);
在DLL中:第三个参数指定为CLSCTX_INPROC_SERVER,CLSCTX_LOCAL_SERVER 程序均会死在这里,用CLSCTX_INPROC_HANDLER,创建会失败,不明白为什么?参考MSDN的文档,在DLL中是应该用CLSCTX_INPROC_HANDLER。
另外,我是用的MFC static连接DLL,希望在InitInstance里面创建COM对象,在ExitInstance释放对象。

解决方案 »

  1.   

    本机dll应该是CLSCTX_LOCAL_SERVER吧.
    com初始化了么?使用::coinitialize()初始化.
      

  2.   

    呃……这个不被支持。
    1 InitInstance是DLLMain的封装
    2 创建COM组件需要加载组件对应的DLL,需要调用DLLMain。
    Windows API文档里面说了,DLLMain不能重入的。
      

  3.   

    好长时间不能上网,没有来看这个帖子了。to jiangsheng(蒋晟.MSMVP2004Jan):我对重入不大懂。
    你的意思是说在一个DLL的DLLMain()里面不能调用另外一个DLL的DLLMain()?
    谢谢你!:)