利用vc调用dll

利用vc调用dll

一时兴起,研究下关于dll的调用,算是作为我首次发表文章啦,怎么说也是我的处子作啊~~~好吧入正题啦

关于dll的调用,查了下资料,有两种——(一)静态调用 (二)动态调用,下面是分别的调用方法

(一)静态调用

静态调用是一种显式的调用方式,即在编程的时候便知道了被调用的DLL中的接口函数,在编译链接的时候将DLL与工程生成的exe相关联。以MyApp.dll为例,具体的操作步骤如下:

(1)需要的文件有:MyApp.dll,MyApp.lib,MyApp.h

(2)假设需要调用MyApp.dll的工程为MyTest,首先把MyApp.dll放到MyTest工程目录的Debug或者Release目录下,然后将MyApp.lib和MyApp.h放到MyTest工程目录的根目录下

(3)用VC打开MyTest工程,选中工程,然后选择VC菜单下的Project->Settings

(4)在弹出的对话框中选择Link选项卡,然后在Object/library modules输入框中输入MyApp.lib,点击OK

(5)在工程的FileView下,将MyApp.h文件添加到Header Files目录下

(6)最后在需要调用DLL中的函数的*.cpp文件中包含#include “MyApp.h”

 

 

(二)动态调用

动态调用是一种隐式的调用方式,即程序运行过程中装载DLL,然后获取指定函数名称的接口函数,然后再调用之。

下面就是我捣鼓了好久的结果啊,也写上很详细注释了
1,将dll——1.dll,放到根目录,与exe放到一起,若还是编程就放到当前工程Debug目录。
2,在代码中复制下面代码。且假设需要调用1.dll中int test(int,int)函数

#include <windows.h>

typedef UINT (CALLBACK* ptest)(int,int );
//其中(int,int)为dll中需要被调用函数的形参类型,须按需要修改
//其中ptest为需要调用函数test的指针类型,故命名为ptest,可以不改

HINSTANCE hDLL;       // Handle to DLL
ptest test;    // Function pointer,  test 为需调用函数名字,为下面方便编程可以改为dll中对应名字
int dwParam1=4;   //为test需要接受的形参1类型,并初始化,为下面方便调用,可按需修改
int  uParam2=5;  //为test需要接受的形参2类型,并初始化,为下面方便调用,可按需修改
int uReturnVal;   //为test函数返回类型

hDLL = LoadLibrary("1.dll");   //1.dll为需呀调用的dll
if (hDLL != NULL)
{
 test = (ptest)GetProcAddress(hDLL,
  "test");    //"test"为dll中需要调用函数的名字
 if (!test)
 {
  // handle the error
  FreeLibrary(hDLL);   //若以后不再调用1.dll,可以执行这一句
  return SOME_ERROR_CODE;    //若调用1.dll出错的返回值,可选
 }
 else
 {
  // call the function
  uReturnVal = test(dwParam1, uParam2);   //调用test函数,传入参数dwParam1, uParam2,并赋值给uReturnVal
 }
}
//下面如果有需要再调用test可以直接使用,当不用调用1.dll时候,可以加上FreeLibrary(hDLL);这一句

 

 

 

    当然我也是学习过vb的,对于vb,调用这些dll是很简单的,直接在窗体中声明部分声明

    Private Declare Function test Lib "D:\小测试\1.dll" (ByVal a As integer, ByVal b As Integer) As integer

    其中说明出test函数名,指出dll路径,列出形参和返回类型即可在程序中调用了。

 

Private Declare Function test Lib "D:\小测试\1.dll" (ByVal a As integer, ByVal b As Integer) As integer

 

             好吧,我的处子作也就告一段落了,我也是一个刚刚学习c++的新手,以后也争取更多的更新,记录下学习的点滴。加油!

 

guyue

2013—7—23

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值