Qt调用Dll问题求解(Dll貌似VC生成的)
最近老是和Dll打交道,我的环境是QT4.7.2+mingw,现在调用第三方提供的一个dll,问题层出不穷,还得请大伙来帮帮忙。第三方dll以及相关文件均可在此网址下载。
第一次尝试:使用QLibrary
#include <QtGui>#include <QTextCodec>#include <QtDebug>#include <windows.h>#include "EQ2008_Dll.h"int main(int argc, char *argv[]){ //不用管这里 QApplication app(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); QTextCodec::setCodecForLocale(QTextCodec::codecForLocale()); QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); //从这里开始 QLibrary bxLib("EQ2008_Dll.dll"); if(!bxLib.load())//加载dll return 0; //定义函数指针 typedef BOOL (*ledConnect)(int cardNum); typedef BOOL (*ledSend)(int CardNum,int x,int y,int iWidth,int iHeight,HBITMAP hBitmap); typedef BOOL (*ledDisConnect)(int cardNum); //解析动态链接库中的函数 ledConnect ledconnect = (ledConnect)bxLib.resolve("User_RealtimeConnect"); ledSend ledsend = (ledSend)bxLib.resolve("User_RealtimeSendData"); ledDisConnect leddisconnect = (ledDisConnect)bxLib.resolve("User_RealtimeDisConnect"); //打印函数地址 qDebug() << (int)ledconnect; qDebug() << (int)ledsend; qDebug() << (int)leddisconnect; //使用dll函数进行设备连接 qDebug() << ledconnect(1); QPixmap pixmap; QLabel label; if(pixmap.load("D:/pic.bmp")){ label.setPixmap(pixmap); qDebug() << "load" << pixmap.toWinHBITMAP(); //使用dll函数向设备发送数据 qDebug() << ledsend(1,0,0,16*16,16*14,pixmap.toWinHBITMAP()); } label.show(); //使用dll函数断开与设备的连接 qDebug() << leddisconnect(1); return app.exec();}#include <QtGui>#include <QTextCodec>#include <QtDebug>#include <windows.h>#include "EQ2008_Dll.h"int main(int argc, char *argv[]){ //不用管这里 QApplication app(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); QTextCodec::setCodecForLocale(QTextCodec::codecForLocale()); QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); QLabel label; QPixmap pixmap; pixmap.load("D:/pic.bmp"); HBITMAP bitmap = pixmap.toWinHBITMAP(); label.setPixmap(QPixmap::fromWinHBITMAP(bitmap)); label.show(); User_RealtimeConnect(1); User_RealtimeSendData(1,0,0,256,224,bitmap); User_RealtimeDisConnect(1); return app.exec();}#ifndef __EQ2008_DLL__#define __EQ2008_DLL__#ifndef MY_EXPORT#define MY_EXPORT __declspec(dllexport)#endif#include "EQ2008_DataStruct.h"/****************参数说明******************///通讯方式常量#define DEVICE_TYPE_COM 0 //串口通讯#define DEVICE_TYPE_NET 1 //网络通讯//串行通讯速度常量#define SBR_9600 9600#define SBR_19200 19200#define SBR_57600 57600#define SBR_115200 115200//EQ3002/2008控制卡类型#define EQ3002_I 0#define EQ3002_II 1#define EQ3002_III 2#define EQ2008_I 3#define EQ2008_II 3//颜色常量#define RED 0x0000FF#define GREEN 0x00FF00#define YELLOW 0x00FFFF//返回值常量#define EQ_FALSE 0#define EQ_TRUE 1/***************************************///添加节目extern "C" MY_EXPORT int __stdcall User_AddProgram(int CardNum,BOOL bWaitToEnd,int iPlayTime);//添加图文区extern "C" MY_EXPORT int __stdcall User_AddBmpZone(int CardNum,User_Bmp *pBmp,int iProgramIndex);extern "C" MY_EXPORT BOOL __stdcall User_AddBmp(int CardNum,int iBmpPartNum,HBITMAP hBitmap,User_MoveSet* pMoveSet,int iProgramIndex);//添加文本区extern "C" MY_EXPORT int __stdcall User_AddText(int CardNum,User_Text *pText,int iProgramIndex);//添加RTF区extern "C" MY_EXPORT int __stdcall User_AddRTF(int CardNum,User_RTF *pRTF,int iProgramIndex);//添加单行文本区extern "C" MY_EXPORT int __stdcall User_AddSingleText(int CardNum,User_SingleText *pSingleText,int iProgramIndex);//添加时间区extern "C" MY_EXPORT int __stdcall User_AddTime(int CardNum,User_DateTime *pDateTime,int iProgramIndex);//添加计时区extern "C" MY_EXPORT int __stdcall User_AddTimeCount(int CardNum,User_Timer *pTimeCount,int iProgramIndex);//添加温度区extern "C" MY_EXPORT int __stdcall User_AddTemperature(int CardNum,User_Temperature *pTemperature,int iProgramIndex);//删除节目extern "C" MY_EXPORT BOOL __stdcall User_DelProgram(int CardNum,int iProgramIndex);//删除所有节目extern "C" MY_EXPORT BOOL __stdcall User_DelAllProgram(int CardNum);//发送数据extern "C" MY_EXPORT BOOL __stdcall User_SendToScreen(int CardNum);//关机extern "C" MY_EXPORT BOOL __stdcall User_CloseScreen(int CardNum);//开机extern "C" MY_EXPORT BOOL __stdcall User_OpenScreen(int CardNum);//校正板卡的时间extern "C" MY_EXPORT BOOL __stdcall User_AdjustTime(int CardNum);//实时发送数据extern "C" MY_EXPORT BOOL __stdcall User_RealtimeConnect(int CardNum); //建立连接extern "C" MY_EXPORT BOOL __stdcall User_RealtimeSendData(int CardNum,int x,int y,int iWidth,int iHeight,HBITMAP hBitmap); //发送数据extern "C" MY_EXPORT BOOL __stdcall User_RealtimeDisConnect(int CardNum); //断开连接//亮度调节extern "C" MY_EXPORT BOOL __stdcall User_SetScreenLight(int CardNum,int iLightDegreen);//回读显示屏内容extern "C" MY_EXPORT BOOL __stdcall User_ReadScreen(int CardNum,HDC DisplayDC);//回读显示屏节目extern "C" MY_EXPORT BOOL __stdcall User_ReadProgram(int CardNum,char *strFileName);/********************************************************************************/#endif //__EQ2008_DLL__