问题描述:

CApplication appExcel;
BOOL bCreateRet = appExcel.CreateDispatch("Excel.Application");

以上代码在主线程中bCreateRet返回TRUE,在子线程中bCreateRet返回FALSE。


问题原因:

执行线程时没有初始化。


解决办法:

添加初始化函数。

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CoInitialize(NULL);
AfxEnableControlContainer();

CApplication appExcel;
BOOL bCreateRet = appExcel.CreateDispatch("Excel.Application");


说明:小白表示不晓得初始化都做了什么,并且只加上CoInitialize(NULL);这一句就解决了我的问题。以上解决方法来自论坛:

[多线程时的CreateDispatch问题](http://bbs.csdn.net/topics/310088635)


另:CApplication::CreateDispatch失败排查方法

  1. 检查计算机本身是否安装相应的程序,如Excel。

  2. 如果安装了相应的程序,检查是否兼容。

  3. 使用release而不是debug。


说明:以上排查方法是上网看到总结的,因为自己没遇到过,所以不确保准确性。