Problème de liaison de l'API Windows native sur Qt + win32 + mingw
Question
J'essaie d'utiliser l'API Windows native avec Qt à l'aide de l'ensemble d'outils mingw. Il existe des problèmes de liaison avec certaines fonctions. Ce qui se produit? Est-ce un bug avec le nom mingw mangling?
#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
Les erreurs:
référence non définie à `CreateEnhMetaFileW @ 16 '
référence indéfinie à `Rectangle @ 20 '
référence non définie à `CloseEnhMetaFile @ 4 '
La solution
Les fonctions CreateEnhMetaFileW ()
et CloseEnhMetaFile ()
sont définies dans la bibliothèque statique Gdi32.lib, vous devez donc vous assurer de créer un lien avec cela. Essayez d’ajouter -lgdi32
à la fin de la ligne de commande que vous utilisez pour compiler. Si cela ne fonctionne pas, vous devrez peut-être spécifier le chemin complet de Gdi32.lib en ajoutant -L / chemin / dans / dossier / contenant / la / bibliothèque -lgdi32
à la place.
Autres conseils
Si vous souhaitez utiliser l'API Windows dans une application Qt, il n'est pas nécessaire de déclarer les fonctions WinAPI externes "C", il suffit d'inclure:
#include <qt_windows.h>
Dans votre fichier de projet (.pro), ajoutez les bibliothèques que vous utilisez:
LIBS += -luser32 -lshell32 -lgdi32
Il est possible que les fonctions soient incluses, mais qu'elles soient mutilées à cause de l'hypothèse C ++.
Regardez dans la déclaration extern C {}. Il est destiné à déclarer des fonctions dont le nom ne doit pas être modifié pour prendre en compte le polymorphisme / la surcharge. (IE deux fonctions portant le même nom).
@torn votre solution a fonctionné pour moi.
Je voulais utiliser un appel API Win32 dans mon application Qt.
le #include le #include your-win32-api-header
et enfin le nom LIBS + = -llibrary.
Notez que vous devrez peut-être donner -L pour les bons chemins également.