我在Qt中遇到了Microsoft Active Accessibility和线程的问题。代码如下:
CComPtr<IAccessible> _pAccMain;
HWND _hWnd = ...; // Handle of some window
HRESULT hr0 = ::AccessibleObjectFromWindow(_hWnd,
OBJID_CLIENT,
IID_IAccessible,
(void**)(&_pAccMain));
long childCount = 0;
HRESULT hr1 = _pAccMain->get_accChildCount(&childCount);
它工作正常,在主线程中这些函数返回hr0和hr1的成功,我得到了_pAccMain和childCount的正确成功数据。但是当我创建一个新线程并尝试使用该新线程中的代码时,我再次获得了hr0和hr1的成功,但我在_pAccMain和childCount中获得了不同的数据。即相同的代码在不同的线程中有多个行为。
为什么另一个线程在该示例中有另一个行为?
我该如何解决它的行为?
我能解决吗?
答案 0 :(得分:1)
AccessibleObjectFromWindow
调用返回相同的接口指针,因此_pAccMain
值不必是指针相等的childCount
,你应该提到工作线程是否为零,或者在子枚举中究竟有什么不同答案 1 :(得分:0)
似乎Qt在每个新线程中悄悄地初始化了COM,之后CoInitializeEx与任何COINIT都无法对它做任何事情。但如果你在CoInitializeEx之前调用新的QThread CoUnitialize一切都会好的,那对我有用。