尝试使用AccessibleObjectFromWindow()时出错



我试图使用AccessibleObjectFromWindow()函数,但我的main.cpp返回这些错误:

main.cpp:24: error: undefined reference to 'IID_IAccessible'
main.cpp:27: error: undefined reference to 'AccessibleObjectFromWindow'
main.cpp:-1: error: collect2.exe: error: ld returned 1 exit status

main.cpp

#include <iostream>
#include <windows.h>
#include <winuser.h>
#include <oleacc.h>
#include <OleAuto.h>
int main(int argc, char *argv[]){
HWND lastForegroundHwnd = GetForegroundWindow();
DWORD dwId = OBJID_CARET;
REFIID riid = IID_IAccessible;
void *ppvObject = NULL;
HRESULT hResult = AccessibleObjectFromWindow(lastForegroundHwnd, dwId, riid, &ppvObject);
return 0;
}

有谁知道我怎么解决这个问题吗?

对于第一个错误,您需要在uuid.lib中链接。

对于第二个错误,您需要链接Oleacc.lib,仅包括oleacc.h是不够的。

请参阅Qt Creator文档中的向项目添加库。

或者,您可以在代码中使用#pragma comment(lib, "filename.lib")语句,例如:

#pragma comment(lib, "uuid.lib")
#pragma comment(lib, "Oleacc.lib")

附带说明,您不需要为dwIdriid参数使用变量,只需直接传递它们(特别是riid)。但更重要的是,您需要将ppvObject声明为IAccessible*,而不是void*,例如:

IAccessible *ppvObject = NULL;
HRESULT hResult = AccessibleObjectFromWindow(lastForegroundHwnd, OBJID_CARET, IID_IAccessible, (void**)&ppvObject);

一个更好的选择是使用IID_PPV_ARGS()宏代替,让它为你处理riidppvObject参数,例如:

IAccessible *ppvObject = NULL;
HRESULT hResult = AccessibleObjectFromWindow(lastForegroundHwnd, OBJID_CARET, IID_PPV_ARGS(&ppvObject));

相关内容

  • 没有找到相关文章

最新更新