DLL动态链接库的设计与调用

作者:jfy1970

QQ953491278  电子邮件:zhiqiangwang58@sohu.com

 

VC++6.0new一个Win32 Dynamic-Link Library工程mylib,注意不要选择MFC AppWizard(dll)。如下图所示:

在建立的工程中添加mylib.hmylib.cpp文件,源代码如下:

//mylib.h

#ifndef LIB_H

#define LIB_H

extern "C" int __declspec(dllexport)add(int x,int y);

#endif

 

//mylib.cpp

#include "mylib.h"

 

int add(int x,int y)

{

       return x+y;

}

 

我们建立一个Win32 Console Application应用程序dllCallExample,它调用mylib中的函数add。如下图所示:

 

源代码如下:

//dllCallExample.cpp

#include <stdio.h>

#include <windows.h>

 

typedef int(*lpAddFun)(int,int); //宏定义函数指针

 

int main(int argc,char *argv[])

{

    HINSTANCE hDll;  //DLL句柄

       lpAddFun addFun; //函数指针

      

       hDll=LoadLibrary("Debug//mylib.dll");

             

       if(hDll==NULL)   //测试句柄调用是否成功。

              printf("error!/n");

       else

        printf("Succeed!/n");

 

       if(hDll!=NULL)

       {

       addFun=(lpAddFun)GetProcAddress(hDll,"add");

          if(addFun!=NULL)

          {

                 int result=addFun(2,3);

                 printf("2+3=%d",result);

 

                 getchar();

                

          }

       FreeLibrary(hDll);

       }

return 0;

}

 

运行该程序,程序成功执行,得到的结果如下:

 

说明:

mylib工程中,在mylib.h中,对函数add的声明前面添加了__declspec(dllexport)语句。这个语句的含义是声明函数addDLL的导出函数。

dllCallExample工程中,在dllCallExample.cpp文件中,要注意几个问题:

首先,语句typedef int(*lpAddFun)(int,int)定义了一个与add函数接受参数类型和返回值均相同的函数指针类型。随后,在main函数中定义了lpAddFun的实例addFun

其次,在函数main中定义了一个DLL HINSTANCE句柄实例hDll,通过Win32 Api函数LoadLibrary动态加载了DLL模块并将DLL模块句柄赋给了hDll

再次,在函数main中通过Win32 Api函数GetProcAddress得到了所加载DLL模块中函数add的地址并赋给了addFun。经由函数指针addFun进行了对DLLadd函数的调用;

最后,应用工程使用完DLL后,在函数main中通过Win32 Api函数FreeLibrary释放了已经加载的DLL模块。

本方案在Windows XP SP2VC++6.0下调试通过。如果需要源代码,请与我联系。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值