qt调用dll功能函数失败

coconet 2010-12-12 12:48:37
调用并口编程的一个dll:inpout32.dll
运行时,装载(load)没有发现问题,但是调用功能函数output时,总是失败
下面是代码
typedef void(*OutputFunction)(int address,int val); //void Output(int adress, int value);
OutputFunction OutPut;
QLibrary inpoutdll("inpout32.dll");
if(!inpoutdll.load())
{
/* 用load()来加载dll成功*/
QMessageBox::information(NULL,"dll","Dll can't load");
}
OutPut=(OutputFunction)inpoutdll.resolve("Output");
if(OutPut)
{
QMessageBox::information(NULL,"dll","sucess");
}
else
{
QMessageBox::information(NULL,"dll","not sucess");
}
...全文
303 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
prettyknight 2010-12-17
  • 打赏
  • 举报
回复
#include<../msysCORE-1.0.14-1-msys-1.0.14-dev/include/dlfcn.h>

typedef int (*DLL_FUNC)(int a , int b); //函数结构要和DLL里的函数定义一致

int CallDLL()
{
void *dp;
DLL_FUNC func;

dp = dlopen("./bin/mydll.so", RTLD_LAZY ); // 打开DLL
if( dp ==NULL ){
printf("%s\n", dlerror());
exit(1);
}
func = (DLL_FUNC)dlsym(dp, "FuncInDll"); // 第二个参数为DLL里的函数名

int ret;
ret = func( 1 , 2 );

return ret;
}

要下载安装msys-1.0.14,并把msys的include和lib文件夹放到../msysCORE-1.0.14-1-msys-1.0.14-dev/下,然后下载dlfcn,并添加进include和lib目录。不可把 ../msysCORE-1.0.14-1-msys-1.0.14-dev/include 加入到INCLUDEPATH,否则会造成程序编译出错。

在XP下测试通过。如果是linux,估计不用下载额外的库。
coconet 2010-12-13
  • 打赏
  • 举报
回复
回LS
我是在windows xp sp3上,用的qt4.7.1
dxms8 2010-12-13
  • 打赏
  • 举报
回复
不知道你的qt版本是多少,运行在什么平台
给你个例子,
AvgFunction avg = (AvgFunction) library->resolve("avg");
函数定义:
extern "C" MY_EXPORT int avg(int a, int b)
{
return (a + b) / 2;
}
with MY_EXPORT defined as

#ifdef Q_WS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif

16,819

社区成员

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

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