Qt + win32 + mingw上的本机Windows API链接问题
题
我正在尝试使用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'
解决方案
函数 CreateEnhMetaFileW()
和 CloseEnhMetaFile()
在静态库Gdi32.lib中定义,因此您必须确保链接。尝试将 -lgdi32
添加到您用于编译的命令行的末尾。如果这不起作用,您可能必须通过将 -L / path /添加到/ folder / contains / the / library -lgdi32
来指定Gdi32.lib的完整路径。
其他提示
如果您想在Qt应用程序中使用Windows API,则无需声明WinAPI函数extern“C”,只需包含:
#include <qt_windows.h>
在项目文件(.pro)中添加您使用的库:
LIBS += -luser32 -lshell32 -lgdi32
可能包含这些函数,但由于C ++假设而导致错误。
查看extern C {}声明。它旨在声明不应该被命名的函数来解释多态/重载。 (IE两个具有相同名称的函数)。
@torn你的解决方案为我工作。
我想在我的qt应用程序中使用win32 api调用。
#include #include #include your-win32-api-header最后是LIBS + = -llibrary名称。
请注意,您也可能必须为正确的路径提供-L。
不隶属于 StackOverflow