尝试使用 AccessibleObjectFromWindow() 时出错
Error trying to use AccessibleObjectFromWindow()
我正在尝试使用 AccessibleObjectFromWindow()
函数,但是我的 main.cpp
returns 这些错误:
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;
}
有谁知道我该如何解决这个问题?
对于第一个错误,您需要 link in uuid.lib
。
对于第二个错误,你需要在Oleacc.lib
中link,只包含oleacc.h
.
是不够的
请参阅 Qt Creator 文档中的 Adding Libraries to Projects。
或者,您可以在代码中使用 #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));
我正在尝试使用 AccessibleObjectFromWindow()
函数,但是我的 main.cpp
returns 这些错误:
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;
}
有谁知道我该如何解决这个问题?
对于第一个错误,您需要 link in uuid.lib
。
对于第二个错误,你需要在Oleacc.lib
中link,只包含oleacc.h
.
请参阅 Qt Creator 文档中的 Adding Libraries to Projects。
或者,您可以在代码中使用 #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));