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! 展开
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! 展开
1个回答
展开全部
失败现象,什么故障?
有的编译器,会自动修改函数的名字(增加个前缀或后缀什么的,比如,把A()改成_7490_A()什么的)。
你先查查CAN2USB.dll里有哪些接口,方法如下:
在DOS命令行下,cd到想查看.dll文件所在目录下。
敲如下命令:dumpbin -exports CAN2USB.dll
或者link -dump -exports CAN2USB.dll 即可。dumpbin和link应该是Vistual Studio里带的命令。
有的编译器,会自动修改函数的名字(增加个前缀或后缀什么的,比如,把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
这算是增加了前缀或后缀么?
追答
是。你试试把函数名改改。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询