У меня есть внешние библиотеки как в .dll и .lib и у меня есть свой файл .h имя библиотеки является «MTK_288_K001» [длл |. .lib | .h]как связать библиотеки DLL в кварт
Здесь мой qt.pro:
QT += core gui serialport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++14 static staticlib
TARGET = kiosk
TEMPLATE = app
SOURCES += main.cpp \
mainwindow.cpp \
serialport.cpp
RESOURCES += resources.qrc
win32: RC_ICONS = icon.ico
FORMS += mainwindow.ui
HEADERS += mainwindow.h \
serialport.h
win32 {
LIBS += -lMTK_288_K001
LIBS += -L$$PWD/ -lMTK_288_K001
}
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
win32:!win32-g++: PRE_TARGETDEPS += $$PWD/MTK_288_K001.lib
else:win32-g++: PRE_TARGETDEPS += $$PWD/MTK_288_K001.lib
main.cpp
#include <QApplication>
#include "mainwindow.h"
#include "MTK_288_K001.h"
int main(int argc, char *argv[])
{
MTK288KROpen("COM1");
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
QCoreApplication::addLibraryPath("./plugins");
QApplication a(argc, argv);
MainWindow mw;
mw.show();
return a.exec();
}
MTK_288_K001.h
#define Bad_CommOpen -101
#define Bad_CommClose -105
#define OK 0
#define ERR -1
#define Parameter_Error -2
#define UpLoadErrorData -3
#define UpLoadTimeOut -4
#define UpLoadCancel -5
#include <windows.h>
int APIENTRY GetSysVerion(char *strVerion);
HANDLE APIENTRY MTK288KUOpen();
int APIENTRY MTK288KUClose(HANDLE ComHandle);
int APIENTRY MTK288KUMultOpen(HANDLE DeviceHdlData[],int *DeviceNumbers);
int APIENTRY MTK288KUMultClose(HANDLE DeviceHdlData[],int DeviceNumbers);
int APIENTRY GetDeviceCapabilities(HANDLE ComHandle, int *_InputReportByteLength, int *_OutputReportByteLength);
int APIENTRY ReadACKReport(HANDLE ComHandle, BYTE _ReportData[],BYTE _ReportLen);
int APIENTRY ReadUpReport(HANDLE ComHandle, BYTE _ReportData[],BYTE _ReportLen);
int APIENTRY ReadReport(HANDLE ComHandle, BYTE _ReportData[],BYTE _ReportLen);
int APIENTRY WriteReport(HANDLE ComHandle, BYTE _ReportData[],BYTE _ReportLen);
int APIENTRY USB_ExeCommand(HANDLE ComHandle,BYTE TxCmCode,BYTE TxPmCode,int TxDataLen,BYTE TxData[],BYTE *RxReplyType,BYTE *RxStCode1,BYTE *RxStCode0,int *RxDataLen,BYTE RxData[]);
HANDLE APIENTRY MTK288KROpen(char *Port);
HANDLE APIENTRY MTK288KROpenWithBaut(char *Port, unsigned int Baudrate);
int APIENTRY MTK288KRClose(HANDLE ComHandle);
int APIENTRY RS232_ExeCommand(HANDLE ComHandle,BYTE TxCmCode,BYTE TxPmCode,int TxDataLen,BYTE TxData[],BYTE *RxReplyType,BYTE *RxStCode1,BYTE *RxStCode0,int *RxDataLen,BYTE RxData[]);
int APIENTRY USB_UpTrackData(HANDLE ComHandle,BYTE tracks,BYTE ReadMode,BYTE _WaitTime,BYTE *RxReplyType,int *_CardDataLen,BYTE _CardData[]);
int APIENTRY USB_Cancel_UpTrackData(HANDLE ComHandle);
int APIENTRY RS232_UpTrackData(HANDLE ComHandle,BYTE tracks,BYTE ReadMode,BYTE _WaitTime,BYTE *RxReplyType,int *_CardDataLen,BYTE _CardData[]);
int APIENTRY RS232_Cancel_UpTrackData(HANDLE ComHandle);
Когда я построить проект кварта дает мне это:
D:\kiosk\main.cpp:-1: error: undefined reference to `MTK288KROpen(char*)@4'
Как я могу сказать Qt, чтобы найти эту функцию во внешних библиотеках?
Если MTK_288_K001 является библиотекой C, вам нужно добавить 'extern 'C" {} 'around' #include" MTK_288_K001.h "'. В любом случае вы можете использовать ходячий ходячий элемент, чтобы увидеть символы в MTK_288_K001.dll и найти «MTK288KROpen» или что-то подобное. –
удалить ** static staticlib ** – eyllanesc
, даже удалив 'static staticlib' или' extern 'C "{}' around '#include" MTK_288_K001.h "', qt все еще дает мне эту ошибку. и '' MTK288KROpen ''существует в dll-файле – COP