Qt + win32 + mingw上的本机Windows API链接问题

时间:2008-11-06 04:48:55

标签: windows qt mingw

我正在尝试使用mingw工具集使用Qt本机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”的未定义引用

未定义引用`Rectangle @ 20'

未定义引用`CloseEnhMetaFile @ 4'

4 个答案:

答案 0 :(得分:4)

函数CreateEnhMetaFileW()CloseEnhMetaFile()在静态库Gdi32.lib中定义,因此您必须确保链接。尝试将-lgdi32添加到您用于编译的命令行的末尾。如果这不起作用,您可能需要通过添加-L/path/to/folder/containing/the/library -lgdi32来指定Gdi32.lib的完整路径。

答案 1 :(得分:3)

如果你想在Qt应用程序中使用Windows API,那么就不需要声明WinAPI函数extern“C”,只需包括:

#include <qt_windows.h>

在项目文件(.pro)中添加您使用的库:

LIBS += -luser32 -lshell32 -lgdi32

答案 2 :(得分:0)

可能包含这些函数,但由于C ++假设而导致错误。

查看extern C {}声明。它旨在声明不应该被命名的函数来解释多态/重载。 (IE两个具有相同名称的函数)。

答案 3 :(得分:0)

@torn你的解决方案为我工作。

我想在我的qt应用程序中使用win32 api调用。

#include #include #include your-win32-api-header

最后是LIBS + = -llibrary名称。

请注意,您也可能必须为正确的路径提供-L。