#c #winapi #dll
#c #winapi #dll
Вопрос:
Я пытаюсь использовать 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, amp;ppvObject);
return 0;
}
Кто-нибудь знает, как я могу это решить?
Комментарии:
1. Я исследовал раньше, но я не могу найти, как связать библиотеку в Qt Creator, вы знаете, как это сделать?
2. Я пробовал, но меня бросает
warning: unknown pragma ignored
3. Затем обратитесь к документации по добавлению библиотек в проекты .
Ответ №1:
Для 1-й ошибки вам необходимо ввести ссылку uuid.lib
.
Для 2-й ошибки вам нужно ввести ссылку 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**)amp;ppvObject);
Лучшим вариантом является использование IID_PPV_ARGS()
вместо этого макроса, пусть он обрабатывает параметры riid
and ppvObject
для вас, например:
IAccessible *ppvObject = NULL;
HRESULT hResult = AccessibleObjectFromWindow(lastForegroundHwnd, OBJID_CARET, IID_PPV_ARGS(amp;ppvObject));
Комментарии:
1. Извините, где я могу получить
uuid.lib
Oleacc.lib
файлы и?2. @andegraph они являются частью Windows SDK, так же, как
oleacc.h
. Если у вас есть этот.h
файл, у вас тоже должны быть.lib
файлы. Выполните поиск в своей системе и убедитесь, что пути поиска вашего компилятора настроены правильно.