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

.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!

失败现象,什么故障?
有的编译器,会自动修改函数的名字(增加个前缀或后缀什么的,比如,把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
这算是增加了前缀或后缀么?

追答

是。你试试把函数名改改。

温馨提示:答案为网友推荐,仅供参考
相似回答