Problema de enlace de la API nativa de Windows en Qt + win32 + mingw
Pregunta
Estoy tratando de usar la API nativa de Windows con Qt usando el conjunto de herramientas mingw. Hay problemas de enlace con algunas funciones. ¿Lo que pasa? ¿Es esto un error con el nombre mingw?
#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
Los errores:
referencia indefinida a `CreateEnhMetaFileW @ 16 '
referencia indefinida a `Rectangle @ 20 '
referencia indefinida a `CloseEnhMetaFile @ 4 '
Solución
Las funciones CreateEnhMetaFileW ()
y CloseEnhMetaFile ()
se definen en la biblioteca estática Gdi32.lib, por lo que debe asegurarse de vincularlas. Intente agregar -lgdi32
al final de la línea de comando que está utilizando para compilar. Si eso no funciona, es posible que deba especificar la ruta completa a Gdi32.lib agregando -L / path / to / folder / contiene / the / library -lgdi32
en su lugar.
Otros consejos
Si desea utilizar la API de Windows en una aplicación Qt, no es necesario declarar las funciones WinAPI externas '' C '', solo incluya:
#include <qt_windows.h>
En su archivo de proyecto (.pro) agregue las bibliotecas que usa:
LIBS += -luser32 -lshell32 -lgdi32
Es posible que las funciones estén incluidas, pero que se estropeen debido a la suposición de C ++.
Mire la declaración externa de C {}. Su objetivo es declarar funciones que no deben ser nombradas para explicar el polimorfismo / sobrecarga. (IE dos funciones con el mismo nombre).
@torn su solución funcionó para mí.
Quería usar una llamada api win32 en mi aplicación qt.
el #include el #include your-win32-api-header
y finalmente el nombre LIBS + = -llibrary.
Tenga en cuenta que es posible que también tenga que dar -L para las rutas correctas.