مشكلة رابط API ويندوز أصلي على كيو تي + + Win32 ومينغو
سؤال
وأنا أحاول أن استخدام Windows الأصلي API مع كيو تي باستخدام مجموعة أدوات مينغو. هناك مشاكل الارتباط مع بعض الوظائف. ما يحدث؟ هل هذا الخلل مع اسم تغيير اسم مينغو؟
#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 '
والمرجعية غير معرفة ل`مستطيل @ 20 '
وإشارة غير محددة إلى `CloseEnhMetaFile @ 4 '
المحلول
ويتم تعريف CreateEnhMetaFileW()
الوظائف وCloseEnhMetaFile()
في مكتبة ثابتة Gdi32.lib، بحيث يكون لديك للتأكد من ربط ضد ذلك. حاول إضافة -lgdi32
إلى نهاية سطر الأوامر الخاص بك الذي تستخدمه لتجميع. إذا لم يفلح ذلك، قد يكون لديك لتحديد المسار الكامل إلى Gdi32.lib بإضافة -L/path/to/folder/containing/the/library -lgdi32
بدلا من ذلك.
نصائح أخرى
إذا كنت تريد استخدام ويندوز API في التطبيق كيو تي ثم ليس هناك حاجة لاعلان WINAPI ظائف خارجي "C"، فقط ما يلي:
#include <qt_windows.h>
في ملف المشروع (.pro) إضافة المكتبات التي تستخدمها:
LIBS += -luser32 -lshell32 -lgdi32
ومن الممكن أن يتم تضمين وظائف، ولكن الحصول على المهترئ بسبب افتراض C ++.
وانظروا إلى خارجي C {إعلان}. والمقصود أنه لإعلان الوظائف التي لا ينبغي تسمية المهترئ لحساب التعدد / الحمولة الزائدة. (IE ظيفتين بنفس الاسم).
وtorn الحل عملت بالنسبة لي.
وأردت أن تستخدم مكالمة المعهد وندوز win32 في طلبي كيو تي.
وتتضمن # وتتضمن # الخاص بك إلى Win32 API على رأس
وأخيرا LIBS + = اسم -llibrary.
وتجدر الإشارة إلى أنك قد تضطر إلى التخلي -L عن الطريق الصحيح للغاية.