1、新建项目: Visual C++ -> Win32项目,名称:CnBlogsDLL
点击完成,进入下一步。
注意不要点完了按钮,点击下一步。
选中DLL单选框,然后点击完成。这样DLL项目的创建工作就基本结束了。
2、新建头文件:CommStruts.h
#pragma once // 学生构造体 typedef struct { // 学生名称 char Name[8]; // 学生年齢 int Age; } Student;
3,新建源文件:ShowStudentInfo.cpp
#include "StdAfx.h" #include <iostream> #include " CommStruts.h " using namespace std; // 输出学生信息 int ShowStudentInfo(Student * stud){ // 输出学生姓名 cout<<"Name : "<<stud->Name<<endl; // 输出学生年龄 cout<<"Age : "<<stud->Age<<endl; // 返回学生年龄 return stud->Age; }
4、新建模块定义文件:
点击追加,然后输入如下代码:
LIBRARY CnBlogsDll EXPORTS ShowStudentInfo
LIBRARY是模块定义文件必须的一部分,它告诉链接器(linker)如何命名你的DLL。EXPORTS也是模块定义文件必须的一部分,这部分使得该函数可以被其它应用程序访问到并且它创建一个导入库。当你生成这个项目时,不仅是一个.dll文件被创建,而且一个文件扩展名为.lib的导出库也会被创建。EXPORTS后面列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n(在进行函数调用时,这个序号将发挥其作用)。
5、最后编译,生成CnBlogsDLL.dll和CnBlogsDLL.lib文件
二、调用DLL
1、创建CLR控制台应用程序:ExecutDll。
当然,创建其他的应用程序也是可以的,这里只是举例说明。
2、添加已有项目CommStruts.h,此文件是上面个创建DLL是建立的构造体文件。
3、在main方法中添加如下代码:
// 加载DLL HINSTANCE hInstance = LoadLibrary("CnBlogsDLL.dll"); // 定义显示学生信息的方法 typedef int (*ShowStudentInfo)(Student * ); // 取得DLL中先生学生信息的方法,并映射成本地的方法 ShowStudentInfo showStudentInfo = (ShowStudentInfo)GetProcAddress(hInstance, "ShowStudentInfo"); // 创建学生信息 Student stud; // 初始化 memset(&stud, 0x00, sizeof(Student)); stud.Age = 100; memcpy(stud.Name,"WGC",sizeof(stud.Name));
// 执行显示学生信息的方法 int age = showStudentInfo(&stud);
这里使用的是动态加载DLL的方法。
4、将编译完成的CnBlogsDLL.dll拷贝到ExecutDll工程的Debug目录下。如果使用静态加载DLL的方法,还需要拷贝CnBlogsDLL.lib文件。
5、编译运行。运行结构如下图: