工具:visual studio 2013
一、写在前面:
1.dll全称为dynamic link library, 即动态链接库,里面包含可有多个程序执行的代码和数据,程序运行时需要dll。lib全称Static link library,即静态链接库,里面包含dll中各函数的入口信息,在程序编译的时候要用到。
2.动态库文件存在,使得设计者可以隐藏函数的具体实现,并且增加代码的复用性(一个dll文件可由多个程序运行,一个lib文件可由多个程序编译)。
3.一个动态库参与的程序中,lib文件和dll文件都要用到。
二、动态库dll的生成:
1.新建项目->Win32项目-> 下一步,在应用程序设置界面中选择DLL(D)选项,完成;
2.在建好的项目中新建头文件(.h),注意在头文件最上边写下这几行代码:
#pragma once //只编译一次
#ifdef XXXXX_EXPORTS //如果定义了XXXXX_EXPORTS变量
#define DLLE_API __declspec(dllexport) //那么定义DLLE_API为 __declspec(dllexport)的别名
#else //如果没有定义
#define DLLE_API __declspec(dllimport) //定义该DLLE_API字段为导入
#endif
XXXXX_EXPORTS是导出者定义的,导入者不会定义这个变量。__declspec(dllexport)为导出标志,若想把某个类导出,在该头文件中把此类写成
class DLLE_API 类名
若想把某个函数导出,则写成
extern "C" 返回类型 DLLE_API 函数名(参数1,参数2,,);
extern “C”表示“其他的类已经定义了这段代码里的内容,这里只是声明”。“C”表示一种编译哈连接规约,即“这段代码可以是符合C语言的编译和连接规约的任何语言,包括fortran等”。
3.建立源文件(C++),实现头文件中的函数。
4.生成。点击调试器按钮或者菜单栏生成DLL选项都可以,最后会在项目根目录的debug里找到dll和lib文件。
三、dll和lib的引用
1.打开需要引用dll和lib的工程(下称“目标工程”),打开属性(alt+enter),找到链接器->输入->附加依赖项,输入"文件名.lib";
2.把lib文件放到目标工程目录下,确保该目录是属性->C++->常规->附加包含目录中的,若不是则添加;
3.把dll文件放到根目录下的Debug文件夹中,注意是根目录下的。
3.在工程中添加与lib名称相同的头文件(.h),在文件最上方注明:
class __declspec(dllimport) XXXXX; //XXXXX为lib中要导出的类的名称,该类也是此头文件中要包含的
若要导出函数,则写成:
extern "C" __declspec(dllimport) void 函数名(参数列表);
4.编写该头文件,写明要导出的类的全部函数和属性;
5.编译+运行