Native Windows-API-Link Problem auf Qt + win32 + mingw
Frage
Ich versuche, native Windows-API zu verwenden, mit Qt mingw Toolset verwenden. Es gibt Link Probleme mit einigen Funktionen. Was geschieht? Ist das ein Bug mit mingw Namen Mangeln?
#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
Die Fehler:
undefined reference to `CreateEnhMetaFileW @ 16'
undefined reference to `Rechteck @ 20'
undefined reference to `CloseEnhMetaFile @ 4'
Lösung
Die Funktionen CreateEnhMetaFileW()
und CloseEnhMetaFile()
sind in der statischen Bibliothek Gdi32.lib definiert, so dass Sie müssen sicherstellen, dass gegen verknüpfen. Versuchen Sie verwenden, um das Ende der Befehlszeile hinzugefügt -lgdi32
zu kompilieren. Wenn das nicht funktioniert, könnten Sie den vollständigen Pfad zu Gdi32.lib durch Hinzufügen -L/path/to/folder/containing/the/library -lgdi32
stattdessen angeben.
Andere Tipps
Wenn Sie Windows-API in einem Qt-App nutzen wollen, dann gibt es keine Notwendigkeit WinAPI Funktionen extern "C" zu erklären, nur sind:
#include <qt_windows.h>
In der Projektdatei (.pro) fügen Sie die Bibliotheken, die Sie verwenden:
LIBS += -luser32 -lshell32 -lgdi32
Es ist möglich, dass die Funktionen enthalten sind, aber aufgrund der C ++ Annahme verstümmelt zu werden.
Schauen Sie in die extern C {} Erklärung. Es ist beabsichtigt, Funktionen zu deklarieren, die für Polymorphismus / Überlastung nicht nennen verstümmelt berücksichtigen werden sollen. (IE zwei Funktionen mit dem gleichen Namen).
@torn Ihre Lösung für mich gearbeitet.
ich einen win32 api Anruf in meiner qt Anwendung verwenden wollte.
die # include die # include your-win32-api-Header
und schließlich die LIBS + = -llibrary Namen.
Beachten Sie, dass Sie -L für die richtigen Pfade haben könnte geben.