有一个自动化处理Office文档的程序,原本运行的很好,基于效率和UI效果的问题,改成了多线程处理,编译没问题,一运行就报错找不到Office软件。
程序中产生错误的地方就是创建COM对象失败,以前好好的为什么失败呢,检查了老半天,才发现是缺少初始化COM环境的调用,即CoInitialize(NULL);
尽管主程序中已经调用CoInitialize(NULL); 但COM应用环境并未传递到线程中去,导致线程中创建COM对象失败了。
因此,需要在线程入口处调用CoInitialize(NULL);,退出线程前再调用CoUninitialize();。