رموز PCSC-Lite على Windows
سؤال
لقد قمت بنجاح ببناء برنامج يمكنه قراءة بطاقة Mifare 1K باستخدام QT على Linux. حتى الآن ، أود أن يعمل على Windows. من ما جمعته ، لا يوجد منفذ PCSC-Lite على Windows وأحتاج إلى استخدام Winscard من Windows SDK. لقد قمت بتنزيله وحصلت على الكثير من الأخطاء المرجعية غير المحددة من QT في Windows (مع MINGW). علي سبيل المثال:
release/ReadCard.o:ReadCard.cpp:(.text+0x48e): undefined reference to `pcsc_stringify_error' release/ReadCard.o:ReadCard.cpp:(.text+0x5e9): undefined reference to `pcsc_stringify_error' release/ReadCard.o:ReadCard.cpp:(.text+0x7ed): undefined reference to `pcsc_stringify_error' release/ReadCard.o:ReadCard.cpp:(.text+0x2e56): undefined reference to `SCardListReaderGroups' release/ReadCard.o:ReadCard.cpp:(.text+0x3adc): undefined reference to `SCardListReaders' release/ReadCard.o:ReadCard.cpp:(.text+0x3cc6): undefined reference to `SCardListReaders' release/ReadCard.o:ReadCard.cpp:(.text+0x3f88): undefined reference to `SCardGetStatusChange' release/ReadCard.o:ReadCard.cpp:(.text+0x4274): undefined reference to `SCardConnect' release/ReadCard.o:ReadCard.cpp:(.text+0x4d1b): undefined reference to `SCardGetStatusChange
لقد حاولت أيضًا تحديد هذه المكتبات في المشروع ، لكنني ما زلت فشلت.
LIBS += -lwinscard -lpcsclite WinSCard.Lib
المحلول 2
لقد مرت بعض الوقت وتمكنت من حل هذا باستخدام الرؤوس من المثال الذي يأتي مع القارئ. ملف .pro الخاص بي يشبه هذا
win32 {
HEADERS += MainWindow.h \
ReadCard.h \
Config.h
INCLUDEPATH += C:/Omnikey/Include
LIBS += C:/Omnikey/Lib/winscardn.lib
}
unix {
HEADERS += MainWindow.h \
wintypes.h \
winscard.h \
reader.h \
pcsclite.h \
ReadCard.h \
Config.h
LIBS += -lpcsclite
}
لست متأكدًا مما إذا كان يمكن استخدام هذا الحل مع نوع آخر من القراء ، لكنه بالتأكيد حل لي.
نصائح أخرى
من الناحية النظرية ، فإن PCSC-Lite هو منفذ من مكدس Windows PC/SC لآلات UNIX. تطبيق Windows PC/SC هو "التنفيذ المرجعي" الذي يحاكي PCSC-Lite. لا يتم تنفيذ جميع وظائف Windows Scard في PCSC-Lite وهناك اختلافات طفيفة ، موثقة في وثائق PCSC-Lite
لا أعرف عن تفاصيل QT ، ولكن بعض الملاحظات:
pcsc_stringify_error
هي وظيفة محددة PCSC-Lite. إنه غير موجود في Windows- لا توجد مكتبة PCSclite على Windows أو Mingw ، لذلك ربما تحتاج إلى ملفات بناء مختلفة لنظام التشغيل Windows.
- ألقِ نظرة على Opensc وكيف يستفيد من جهاز الكمبيوتر/SC (-Lite) وإذا كنت تبني مع Mingw ، فقم بإلقاء نظرة على مشروع "بناء". الداخلية winscard.h من Opensc قد تكون ذات أهمية بالنسبة لك أيضًا.
ما عدا pcsc_stringify_error
, ، مشاكلك مع نظام Windows Generic و QT (QMake؟) البناء.
واجهت نفس المشكلة ، ولم أتمكن من استخدام Winscard من Windows SDK مع برنامج التحويل البرمجي للبلدان. يتمثل الإصلاح السريع في استخدام برنامج التحويل البرمجي MSVC ++ (إذا كان لديك إمكانية الوصول إليه في الخارج ..) بدلاً من MINGW (ستحتاج إلى إنشاء QT نفسه باستخدام برنامج التحويل البرمجي MSVC ++ أيضًا).
ربما من الممكن أيضًا الحصول على هذا العمل مع Mingw لكنني لم أنظر إليه أكثر من ذلك ..