Qt creator下加载vc6编写的dll失败,求助。。。

zhaigch 2014-05-08 08:23:17
现有一个dll库可能是vc6,因为我用vc6的dependency工具查看它依赖mfc42.dll。。。
我的Qt用的编译器是mingw gcc!背景割。。。。。。。。。。。。。

两种方法加载dll:
1 QLibrary 动态加载
QLibrary myLib("SJJ1009forformalchip.dll");
if(myLib.load())
{
qDebug("load dll success....");
typedef int (_stdcall *MyPrototype)(char*,char*,char*);
MyPrototype ConnectDevice = (MyPrototype) myLib.resolve("ConnectDevice");
if (ConnectDevice)
{
qDebug("load function ok...");
ret = ConnectDevice(ip,port,time);
}
else
qDebug("load function failed...");
}
else
qDebug("load dll failed...");

结果总是load失败。。。。

2 隐式加载
修改pro文件
LIBS += -lSJJ1009forformalchip
然后
extern int __cdecl ConnectDevice(char*,char*,char*);
编译链接时,报错,没有找到ConnectDevice
SJJ1009forformalchip.dll 放到Qt\4.8.5\lib下了,
后来修改
LIBS += -Le:/xxxx -lSJJ1009forformalchip
编译链接时,报错,没有找到ConnectDevice!
换用vc6.0,一点问题没有!
#include<stdio.h>
#include<windows.h>
typedef int (_stdcall *MyPrototype)(char *,char *,char *);
extern int _stdcall ConnectDevice(char*,char*,char*);
int main()
{
HMODULE glibsample;
MyPrototype ConnectDevice = NULL;
char ip[]="192.168.1.128";
char port[]="6666";
char time='3';
int ret = -1;
glibsample = LoadLibrary("SJJ1009forformalchip.dll");
if(glibsample)
{
printf("get dll ok...\n");
ConnectDevice=(MyPrototype)GetProcAddress(glibsample,"ConnectDevice");
if(ConnectDevice)
{
ret = ConnectDevice("192.169.0.1","6666",&time);
printf("ret=%d\n",ret);
}
else
printf("GetProcAddress failed...\n");

}
else
printf("load dll failed...\n");
return 0;
}


求大神分析下,问题会出现在哪里?该dll中可能调用了比较多的windows的api!Qt creator能解决这个问题么?还是必须要换成vc去开发这个dll的应用!VC很久不用了,用起来很费劲,想尽量用Qt,换成vs+qt库能不能解决这个问题?
...全文
316 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaigch 2014-05-09
  • 打赏
  • 举报
回复
http://hi.baidu.com/kaienfr/item/0d12b1f34cb3eeda6225d2b1
buyong 2014-05-09
  • 打赏
  • 举报
回复
引用 3 楼 zhaigch 的回复:
[quote=引用 2 楼 buyong 的回复:] 两种dll的内部格式可能有些差异。最好找到源码,重新编译
本来就是人家加密的东西,没有源码![/quote] 那最好调用者用vc6. 一个办法是你用vc6调用这个dll函数测试,如果成功,你写个包装的dll, 设计接口尽量简单通用。比如就一个void Start();,里面把必要的信息写成临时文件,然后把这个dll给QT调用,再QT里读取临时文件。
shenchenman 2014-05-09
  • 打赏
  • 举报
回复
qt不支持windowsAPI的东西。人家跨平台的为什么要支持你的windows?你要么就别用QT了,要用QT就别用windows的东西
zhaigch 2014-05-09
  • 打赏
  • 举报
回复
引用 2 楼 buyong 的回复:
两种dll的内部格式可能有些差异。最好找到源码,重新编译
本来就是人家加密的东西,没有源码!
buyong 2014-05-08
  • 打赏
  • 举报
回复
两种dll的内部格式可能有些差异。最好找到源码,重新编译
奉壹 2014-05-08
  • 打赏
  • 举报
回复
dll导出函数全部定义成纯C的 或者 QtCreator换成cl编译,cdb调试 MinGW使用VC++的dll基本是不可能的,当然如果楼主找到方法请告诉我,谢谢

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧