动态载入动态库(dll)

今天遇到一个客户需要使用我们的动态库,但是声明只要Dll和头文件(函数声明),别的都不用,lib也不用,客户之所以要这样,是因为他们之前用的动态库的调用方式也是这样的,于是我就赶紧查找了一些关于动态库动态调用的资料,因为用到了,就想记下来了,呵呵~~~~

动态库名:cdll5.dll

函数原型:unsigned long FunctionTest(unsigned long Rand);(该函数为动态库中函数)

函数导出声明:unsigned long FAR __stdcall FunctionTest(unsigned long Rand);

 

调用开始:

首先宏定义函数指针

typedef unsigned long (WINAPI* LockFunction)(unsigned);(这里的返回值和参数都应该和动态库中的声明保持一致)

 

 LockFunction aaa;//声明变量

 HINSTANCE   hload;//LoadLibrary返回的句柄
 CString str;
 hload=LoadLibrary("cdll5.dll");//载入动态库,路径为当前目录
 if (hload!=NULL)
 {
  aaa=(LockFunction)GetProcAddress(hload,"FunctionTest");//在动态库中查找FunctionTest对应的函数
  if (aaa!=NULL)
  {
   unsigned long ret=aaa(12345);
   str.Format("%d",ret);
   MessageBox(str);
  }
  FreeLibrary(hload); //释放
 }

 

在宏定义函数指针的时候加了WINAPI*,开始没加的时候编译连接通过,但是一运行代码程序就死掉了,断点调试发现运行到

unsigned long ret=aaa(12345);

程序就死掉了,不知道什么原因,希望能有高手给指明原因,先谢谢了,后来加上WINAPI*之后就没问题了

参考资料:http://www.diybl.com/course/4_webprogram/asp.net/netjs/2007921/72754.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daiafei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值