2008-11-06 122 views
1

我正在嘗試使用原生windows API與Qt使用mingw工具集。有些功能存在鏈接問題。怎麼了?這是一個與明星名稱混淆的bug嗎?Qt + win32 +上的原生Windows API鏈接問題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'

未定義參考`矩形@ 20'

未定義參考`CloseEnhMetaFile @ 4'

回答

4

函數CreateEnhMetaFileW()CloseEnhMetaFile()在靜態庫Gdi32.lib中定義,因此您必須確保鏈接到agai那麼。嘗試將-lgdi32添加到您用於編譯的命令行的末尾。如果這不起作用,則可能需要通過添加-L/path/to/folder/containing/the/library -lgdi32來指定Gdi32.lib的完整路徑。

0

可能包含這些函數,但是由於C++的假設而變得不穩定。

看看外部C {}聲明。它的目的是聲明函數不應該被名字損壞以解釋多態性/重載。 (IE兩個同名的函數)。

2

如果你想在Qt的應用程序使用Windows API那麼就沒有必要宣佈WinAPI的函數爲extern「C」,只包括:

#include <qt_windows.h> 

在項目文件(.pro),來增加你的庫使用:

LIBS += -luser32 -lshell32 -lgdi32 
0

@torn您的解決方案爲我工作。

我想在我的qt應用程序中使用win32 API調用。

中的#include 將#include你-Win32的API頭

終於LIBS + = -llibrary名。

請注意,您可能必須爲正確的路徑提供-L。

+0

這不應該是一個答案,只是@ torn的回答評論。 – 2012-12-02 12:56:39