我正在尝试使用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'
答案 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。