DLL编写和调用教程
DLL编写和调用教程(附详细工程截图)
在学习中记录与分享
2015年5月15日星期五
1.新建一个Dll工程,工程名MyDll 步骤Win程序-> DLL -> 完成
会自动生成一个MyDll.cpp、dllmain.cpp、stdafx.cpp、targetver.h、stdafx.h共个文件在创建Dll工程中,勾选导出符号,会自动添加MyDll.h
2.新建一个MyDll.h,在里面写入代码
#ifndef MyDll_H_
#define MyDll_H_
//方法一
extern "C"
{
_declspec(dllexport) int Add(int one, int two);
_declspec(dllexport) int Mul(int one, int two);
//其它函数方法,安装上面的个写在下面
};
/* 方法二使用宏定义
#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport)
#else
#define MYLIBDLL extern "C" _declspec(dllexport)
#endif
//这里就定义了一个函数add
MYLIBDLL int Add(int one, int two);
MYLIBDLL int Mul(int one, int two);
*/
#endif
这里还有非常关键的一步,就在MyDll.cpp中添加头文件
#include "MyDll.h"//这一句别忘记了,否则后面调用函数编译不了
3.在MyDll.cpp中写入每一个函数的实现方法
int Add(int a,int b)
{
return a+b;
}
///////////
int Mul(int a,int b)
{
return a*b;
}
4.生成dll和lib文件
()生成Dll文件,DLL右键解决方案,生成解决方案,便会自动生成MyDll.dll。
()那如何生成lib文件呢?
也是右键解决方案,添加-> 新建项,选择m模块定义文件(.def)
在编译一次就生成了lib文件,还有MyDll.dll文件
()取消lib文件的生成
在解决方案的属性中->配置属性->链接器->输入->模块定义文件MyDll.def
删除MyDll.def在重新编译就可以了。
这里需要lib文件,不选择删除操作
5.新建调用工程,调整依赖关系、启动项
右键MyDll解决方案->添加->新建项目这里选择常见默认的Win32控制台应用程序右键调用Dll函数->项目依赖项->勾选MyDll,在右键设置为启动项目
6.调用dll的内部函数
写入以下代码
// 调用Dll函数.cpp : 定义控制台应用程序的入口点。
#pragma comment (lib,"MyDll.lib")
#include "stdafx.h"
#include
#include
using namespace std;
//这部分内容必须填写,否则提示error C3861: “Add”: 找不到标识符
extern "C"
{
_declspec(dllimport) int Add(int a,int b);
_declspec(dllimport) int Mul(int a,int b);
};//这里有没有;,不报错
int _tmain(int argc, _TCHAR* argv[])
{
int a = 20;
int b = 30;
cout<<"a+b="< cout<<"a*b="< getchar(); return 0; } 7.编译,运行,ok 附件:截图保存操作过程从新建工程开始 工程截图: 手动添加MyDll.h 新建工程调用Dll函数 设置工程调用Dll函数的依赖项目为MyDll 将调用Dll函数设置为启动项目 操作完成后的解决方案 写入调用代码 编译,运行 生成的文件如下图 运行结果 关闭程序后显示