Qt + win32 + mingw上的原生Windows API链接问题

我正在尝试使用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提供正确的路径。