我正在尝试使用mingw工具集使用本机的Windows API与Qt。 有些function存在链接问题。 怎么了? 这是一个明明命名的bug吗?
#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/to/folder/containing/the/library -lgdi32
来指定Gdi32.lib的完整路径。
如果你想在Qt应用程序中使用Windows API,那么不需要声明WinAPI函数extern“C”,只需包含:
#include <qt_windows.h>
在您的项目文件(.pro)中添加您使用的库:
LIBS += -luser32 -lshell32 -lgdi32
这些函数有可能被包含在内,但是由于C ++的假设而变得很糟糕。
看看外部的C {}声明。 它旨在声明函数不应该被名称损坏,以解决多态性/重载。 (IE两个同名的函数)。
@torn你的解决方案为我工作。
我想在我的qt应用程序中使用win32 API调用。
#包括#include your-win32-api-header
最后是LIBS + = -llibrary的名字。
请注意,您可能还必须为-L提供正确的路径。