2

我正在尝试使用 mingw 工具集将本机 Windows API 与 Qt 一起使用。某些功能存在链接问题。发生什么了?这是 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

4 回答 4

4

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

于 2008-11-06T04:55:52.560 回答
3

如果您想在 Qt 应用程序中使用 Windows API,则无需声明 WinAPI 函数 extern "C",只需包括:

#include <qt_windows.h>

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

LIBS += -luser32 -lshell32 -lgdi32
于 2010-09-08T18:13:39.727 回答
0

可能包含这些函数,但由于 C++ 假设而受到破坏。

查看 extern C { } 声明。它旨在声明不应因多态性/重载而名称混乱的函数。(IE 两个函数同名)。

于 2008-11-06T04:59:29.477 回答
0

@torn 你的解决方案对我有用。

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

#include #include your-win32-api-header

最后是 LIBS += -llibrary 名称。

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

于 2011-01-11T14:14:55.580 回答