在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释放对象。
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释放对象。
com初始化了么?使用::coinitialize()初始化.
1 InitInstance是DLLMain的封装
2 创建COM组件需要加载组件对应的DLL,需要调用DLLMain。
Windows API文档里面说了,DLLMain不能重入的。
你的意思是说在一个DLL的DLLMain()里面不能调用另外一个DLL的DLLMain()?
谢谢你!:)