C++动态调用dll库(例子)


本例只当作练习使用哦!!!


1.首先要生成一个功能简单的dll库,先新建项目–>win 32项目(比如命名为CDLL)–>dll(选中空项目)–>完成。
2.新建一个头文件,命名为dllgenerator.h,完成如下代码:

#ifndef __CDLL_H__
#define __CDLL_H__
extern "C" int _declspec(dllexport) add(int x, int y);
#endif

注:add(int x,int y)函数作为练习来使用,我们也可以用其他函数来代替,还有一个“int”是返回值类型。extern “C”是为了防止生成的dll代码在其他编译器使用时可能会被改变,其函数可能也会发生变化。
3.新建一个源文件,命名为dllgenerator.cpp(与之前的头文件名称须相同),完成如下代码:

#include "dllgenerator.h"

int add(int x, int y)
{
    return x + y;
}

此时,点击运行,在debug文件夹中则能找到生成的CDLL.dll文件。至此生成dll文件完成,接下来就是如何调用dll库的问题了。
4.新建一个项目–>MFC应用程序(在此命名为Testadd)–>选择对话框–>完成。记得将CDLL.dll库文件导入到项目中(具体做法为右键项目,选择添加–>现有项,找到库文件,添加),接下来在对话框中加入一个编辑框和一个按钮(注意编辑框的ID我设置为了IDC_STATIC),给按钮添加事件处理程序,函数名随便写,好记就行,也可以就按程序给我们定义好了的函数名,然后在事件处理程序中完成如下代码:

typedef int(*lpAddFun)(int,int); //宏定义函数指针类型
 HINSTANCE hDll; //DLL句柄 
 lpAddFun addFun; //函数指针
 hDll = LoadLibrary(_T("CDLL.dll"));
 int result=0;//将函数返回的值赋给它,这里先初始化
 CString str;
 if (hDll != NULL)
  {
    addFun = (lpAddFun)GetProcAddress(hDll, "add");/*用addFun取代dll库中的add函数*/
    if (addFun != NULL)
      {
        result = addFun(2, 3);//这里是将整型2和整型3作为参数传进去
        str.Format(_T("%d"),result);
        SetDlgItemText(IDC_STATIC,str);
        UpdateData(false);
      }
   FreeLibrary(hDll);
   }

(注:若小伙伴对传进去的参数不太满意,可以添加两个编辑框控件,可随意设置也行。)
5.最后别忘了将CDLL.dll文件放到Testadd.exe文件所在的Debug文件夹中,这时点击运行,出来一个对话框,单击新添的按钮,编辑框会显示2+3之后的数据,即5,说明调用dll库文件成功。
希望对阅读这篇文章的小伙伴有些许帮助哦!!!

你可能感兴趣的:(dll库调用)