Qt成功加载dll文件后,编译时报出找不到dll里的接口函数

Airwudi1984 2018-01-30 12:45:38
引用 楼主 Airwudi1984 的回复:
大家好,初学者,刚接触C++和Qt。之前发过帖子,按照跟帖中的方法没有解决问题,所以再次来论坛求助

Qt 版本如下图:


构件套件为MinGW 32bit



软件的功能是通过调用API的接口来控制外接设备的驱动。
问题在于在Qt中加载dll文件成功后,调用dll中的API函数,并将函数的返回值赋给一个变量。但是总是报错,请问怎么解决这个问题。

1、加载dll文件没问题。
    QLibrary mylib("vxlapi.dll");   //加载所用到的dll文件
if(mylib.load())
{
qDebug()<<"load successed";
}
else
{
qDebug()<<"load failed";
}


2、dll文件相关的头文件vxlapi.h中对需要调用的函数进行了申明,就是这个xlOpenDriver():
/*------------------------------------------------------------------------------
xlOpenDriver():
--------------------------------------------------------------------------------
The Application calls this function to get access to the driver.
*/

#ifdef DYNAMIC_XLDRIVER_DLL
// in case of dynamic loading the application defines this function
typedef XLstatus (_XL_EXPORT_API *XLOPENDRIVER) (void);
#else
XLstatus _XL_EXPORT_DECL xlOpenDriver(void);
#endif


3、定义局部变量CallStatus,并将函数xlOpenDriver()的返回值赋给CallStatus,然后就报错了说找不到此函数。
void CANInit::on_xlOpenDriver_pushButton_clicked()
{
XLstatus CallStatus;
CallStatus=xlOpenDriver();

if(CallStatus)
{
qDebug()<<"Function call successed";
}
else
{
qDebug()<<"Function call failed";
}
}





API的使用手册给出的说明是这样的:


我用dll破解工具exeScope看了这个dll,貌似里面是有这个函数的。


请问大神这个是Qt配置的问题还是dll文件的问题,怎么解决?谢谢了

最后附上程序压缩包,里面有dll文件,在debug文件夹下。如果大神有空的话帮我调一下,感谢了。
https://pan.baidu.com/s/1eTKGW1c
...全文
1515 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Airwudi1984 2018-01-31
  • 打赏
  • 举报
回复
引用 1 楼 dext 的回复:
基本问题. 加 __declspec(dllimport)
您好,您是指在调用函数时,前面加上__declspec(dllimport)吗?
donwmufromdying 2018-01-31
  • 打赏
  • 举报
回复
如果你不使用dllimport的话就需要有.def文件的支持.当然也可能是你的dll是32bit还是64bit和你的调用者是否匹配问题
ldxab 2018-01-31
  • 打赏
  • 举报
回复
可能是函数接口不对,你看看dll函数内的接口和h文件的接口是否一致
dext 2018-01-30
  • 打赏
  • 举报
回复
基本问题. 加 __declspec(dllimport)

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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