qt creator加载VC++编写的动态库成功,但调用该库里面的函数失败

.dll.lib.h文件都放在了工程目录下,输出目录也放了.dll文件typedefint(*Fun)(void);intmain(){QLibrarymylib("CA... .dll .lib .h文件都放在了工程目录下, 输出目录也放了.dll文件
typedef int (*Fun)(void);

int main(){

QLibrary mylib("CAN2USB.dll");//声明所用到的dll文件

if ( mylib.load() )//判断是否正确加载
{
QMessageBox::information(NULL,"OK","DLL load is OK!");
Fun open=(Fun)mylib.resolve("CAN2USB_openCAN");
if(open)
{
QMessageBox::information(NULL,"OK","Link to Function is OK!");
open();
} else
QMessageBox::information(NULL,"NO","Link to Function is Failed!");
} else
QMessageBox::information(NULL,"NO","DLL is not loaded!");

..........
}

输出结果: OK, DLL load is OK!
NO, Link to Function is Failed!
展开
 我来答
cooke1234
推荐于2017-09-13 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3601万
展开全部
失败现象,什么故障?
有的编译器,会自动修改函数的名字(增加个前缀或后缀什么的,比如,把A()改成_7490_A()什么的)。
你先查查CAN2USB.dll里有哪些接口,方法如下:

在DOS命令行下,cd到想查看.dll文件所在目录下。
敲如下命令:dumpbin -exports CAN2USB.dll

或者link -dump -exports CAN2USB.dll 即可。dumpbin和link应该是Vistual Studio里带的命令。
追问
我看了下  他显示
3 2 00001220 ?CAN2USB_openCAN@@YAHXZ
这算是增加了前缀或后缀么?
追答
是。你试试把函数名改改。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式