2008-11-06 2 views
1

Я пытаюсь использовать собственный API Windows с Qt с помощью набора инструментов mingw. Есть проблемы с некоторыми функциями. Что происходит? Является ли это ошибкой с изменением названия mingw?Проблема с родственной связью Windows API на Qt + win32 + mingw

#ifdef Q_WS_WIN 
    HWND hwnd = QWidget::winId(); 
    HDC hdcEMF = CreateEnhMetaFile(NULL, NULL, NULL, NULL) ; 
    Rectangle(hdcEMF,100,100,200,200); 
    HENHMETAFILE hemf = CloseEnhMetaFile(hdcEMF); 
    OpenClipboard(hwnd); 
    EmptyClipboard(); 
    SetClipboardData(CF_ENHMETAFILE,hemf); 
    CloseClipboard(); 
#else

Ошибка:

неопределенная ссылка на `CreateEnhMetaFileW @ 16'

неопределенной ссылка на` Rectangle @ 20'

неопределенной ссылка на `CloseEnhMetaFile @ 4'

ответ

4

Функции CreateEnhMetaFileW() и CloseEnhMetaFile() определены в статической библиотеке Gdi32.lib, поэтому вам необходимо убедиться, что вы хотите связать agai nst это. Попробуйте добавить -lgdi32 в конец вашей командной строки, которую вы используете для компиляции. Если это не сработает, вам может потребоваться указать полный путь к Gdi32.lib, добавив вместо этого -L/path/to/folder/containing/the/library -lgdi32.

0

Возможно, что функции включены, но становятся искалеченными из-за предположения C++.

Посмотрите на выражение extern C {}. Он предназначен для объявления функций, которые не должны быть названы искаженными для учета полиморфизма/перегрузки. (IE две функции с тем же именем).

2

Если вы хотите использовать Windows API в приложении Qt, то нет никакой необходимости объявлять WinAPI функции Экстерн «C», просто включают в себя:

#include <qt_windows.h> 

В файле проекта (.pro) добавить библиотеки, использование:

LIBS += -luser32 -lshell32 -lgdi32 
0

@torn ваше решение сработало для меня.

Я хотел использовать вызов win32 api в своем приложении qt.

помощью #include директивы #include вашего-win32-апи-заголовок

и, наконец, LIBS + = -llibrary имени.

Обратите внимание, что вам, возможно, придется указать -L для правильных путей.

+0

Это не должен быть ответ, просто комментарий на ответ @ torn. – 2012-12-02 12:56:39