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 '

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top