• 13223阅读
  • 9回复

【提问】qt 可以调用纯VC编译的DLL库吗 [复制链接]

上一主题 下一主题
离线18283848
 

只看楼主 倒序阅读 楼主  发表于: 2006-02-28
【提问】qt 可以调用纯VC编译的DLL库吗
我想用qt做游戏客户端, 但已经有一套通讯架构了,也就是客户端的通讯已经有一套用mfc类做的通讯dll, 我的QT客户端程序可以很方便的调用到原来已经做好的mfc的dll通讯库吗.
[ 此贴被XChinux在2006-02-28 14:30重新编辑 ]
离线cocalele
只看该作者 1楼 发表于: 2006-03-01
可以啊,LoadLibrary,不过这样丧失了平台无关性。看你的说法你们有用VC做的,已经不是平台无关的了。尽管用吧 :)
离线18283848

只看该作者 2楼 发表于: 2006-03-01
LoadLibrary ?楼上的是说QLibrary 这个类来装入dll实现的吗?

实际的环境是这样的,因为原来已经有做一套通讯的库在windows下,使用的都是winsock 类 ,互斥 类,线程类都是 mfc的,的如果要改成QSocket等那些类来换原来已经做好的,工作量就大了,实际上我们原来那套通讯库在linux 下也实现了客户端,函数名和windows是一样的。所以linux下的库我也可以做成动态库来给qt调用。所以原来那一套通讯的架构如果可以在qt客户端使用我就不打算改了. 我看qt3.3文档怎么说qt只能装入与平台无关的动态库?(不知道是不是翻译有问题),如果是只能装入平台无关的,那我原来的库有用mfc的那些类,肯定是相关平台的。

另外如果可以实现,调用的时候有没有什么要注意的呀,楼主有没有什么SAMPLE呀,刚刚接触QT还不是很熟悉,希望多多指教。

目前的状态就是我有一整套 UNIX (服务器)---windows(linux) 客户端的通讯架构的东西,现在这套东西我想利用,前台游戏界面我想用qt来开发。 至于qt的跨平台我倒不需要考虑那么多,因为我要开发的客户端也主要在WINDOWS下使用。
离线18283848

只看该作者 3楼 发表于: 2006-03-01
再问一下 LoadLibrary ?是指win32的LoadLibrary函数吗, 如果是qt里面怎么调用这个函数呢?

LoadLibrary 可以显示连接dll就不需要Lib导入文件了, QLibrary 类加载一个编译的dll,需要用到lib文件吗?
在线XChinux

只看该作者 4楼 发表于: 2006-03-01
这个QLibrary对应的就是Windows下的LoadLibrary。

不过,看你的帖子里说的,你原来的用MFC做的通讯库是以哪种形式给出的?没有.lib么?可否以静态加载的方式使用这个DLL?不能这样使用的话再使用动态加载。但动态加载需要DLL必须以一定格式输出,比如extern "C", dllexport macro等。

即,你能够在普通的C++程序中使用WIN32 API函数LoadLibrary()来加载的话,那才能使用QLibrary来加载。
另外,疑惑的是,为什么用MFC来做服务器端的通讯库?既然是WINDOWS和UNIX上都用的,为什么要写两套代码来分别维护?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线18283848

只看该作者 5楼 发表于: 2006-03-01
我原来的库我没有真正独立出来做DLL,刚刚我才把原来的通讯代码独立出来编译成DLL了,编译出来后是带LIB 和DLL两个文件的,我就不明白,QT要加载我刚刚编译的DLL库是不是那个LIB文件没什么用呢?我使用了 extern "C" __declspec(dllexport) 修饰DLL文件里我要使用的函数,

你能够在普通的C++程序中使用WIN32 API函数LoadLibrary()来加载的话? 这么说qt程序里怎么使用WIN32 API函数LoadLibrary()函数呢?

我原来的服务器程序是基于UNIX的,客户端有LINUX的也有WINDOWS(VC开发)的,而且它的通讯架构已经是很稳定的了。现在我就是想用原来的那一套系统的通讯架构 现在新要开发游戏客户端用qt来做,所以就会有上述的疑问。

那现在qt可以使用我原来的基于MFC的通讯库吗?
我现在还是不清楚qt里怎么调用WIN32 API函数LoadLibrary()来加载dll?
在线XChinux

只看该作者 6楼 发表于: 2006-03-01
首先,Qt只是一套C++库。QT程序就是C++程序。你的东西只要C++能做,就能加进去。
我没有研究过,不过我猜测QLibrary实际上就是调用的LoadLibrary()这个WIN32 API函数。
你想用哪个都可以不过我建议你既然使用QT了就使用QLibrary来调用。如果你要使用LoadLibrary()还要加相应的头文件甚至还要加链接库。

还有,想问一句,你的这个DLL中到底用到没用到MFC???(使用VC写的,并不等于就用到MFC)
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线18283848

只看该作者 7楼 发表于: 2006-03-01
编译出来的通讯DLL库,很肯定有用到MFC的类, 互斥类 信号类 SOCKET类都谁MFC级别的,不是 WIN32级别的,

昨天再看了看VC生成 dll,可以生成3种 DLL,一种是WIN32 console 的DLL, 一种是正规MFC DLL 一种是扩展 MFC DLL 我现在生成的是正规MFC DLL 类型的通讯库.这有关系吗?
离线18283848

只看该作者 8楼 发表于: 2006-03-03
今天试了了一下,不行呀,
     QLibrary libtest("mfcdll");
     if(libtest.isLibrary("mfcdll"))
        qDebug() << "load dll failure ";
     else
        return ;

好象总是装不进我的通讯动态库mfcdll呀。谁有什么招没有,我编译的DLL是正规的MFC动态库。
离线18283848

只看该作者 9楼 发表于: 2006-03-03
搞定了,可以加载用MFC写的动态库 ,
就用 QLibrary ,

使用 extern "C" __declspec(dllexport) 修饰DLL文件里要使用的函数就OK了.
快速回复
限100 字节
 
上一个 下一个