我试图使用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")
附带说明,您不需要为dwId
和riid
参数使用变量,只需直接传递它们(特别是riid
)。但更重要的是,您需要将ppvObject
声明为IAccessible*
,而不是void*
,例如:
IAccessible *ppvObject = NULL;
HRESULT hResult = AccessibleObjectFromWindow(lastForegroundHwnd, OBJID_CARET, IID_IAccessible, (void**)&ppvObject);
一个更好的选择是使用IID_PPV_ARGS()
宏代替,让它为你处理riid
和ppvObject
参数,例如:
IAccessible *ppvObject = NULL;
HRESULT hResult = AccessibleObjectFromWindow(lastForegroundHwnd, OBJID_CARET, IID_PPV_ARGS(&ppvObject));