0

在单独的线程上运行 wxWidget 的常用对话框时是否有任何对象?我正在开发一个浏览器插件,所以我需要在主浏览器线程之外进行冗长的操作。

我做了一个小测试,它似乎有效,但出现警告:

....\src\msw\dirdlg.cpp(333):“CoCreateInstance(CLSID_FileOpenDialog)”失败,错误为 0x800401f0(尚未调用 coInitialize。)。

这是否意味着我必须调用 wxApp::Initialize(...) 或其他一些函数?

谢谢,克里斯蒂安

4

2 回答 2

1

您只需要在使用 COM的每个线程中调用CoInitialize() 。因此,在创建通用对话框对象之前,只需调用 CoInitialize() (每个线程一个)并在线程结束时调用CoUninitialize()

对于主线程 wxWidgets 在内部执行此操作。对于其他线程,您需要手动调用这些函数。它通常与 GUI 无关,但与 wxWidgets 内部使用的 COM 对象有关。

于 2012-09-24T00:06:01.630 回答
1

是的,有“反对意见”

多线程应用程序的重要说明

在编写多线程应用程序时,强烈建议没有辅助线程调用 GUI 函数。

http://docs.wxwidgets.org/trunk/overview_thread.html

于 2012-09-24T13:01:30.103 回答