1. DLL工程创建
我们在封装dll接口的时候,在vs创建工程时选的应用程序类型选的是“DLL”,在附加项中选择“空项目”(也可不选,让vs给自动定义一些.h和.cpp),此时即可创建一个空的工程,没有任何.h和.cpp。此时查看项目的“配置属性--C/C++--预处理器--预处理器定义”,可发现vs已帮我们默认定义以下宏,如图所示
WIN32
_DEBUG_WINDOWS
_USRDLL
****_EXPORTS(即:工程名称_EXPORTS)
**dll.h头文件的自己定义,在头文件中添加以下代码:
#pragma once // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 ABSTRACTVIDEODATAAPPLICATIONDLL_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // ABSTRACTVIDEODATAAPPLICATIONDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifdef ***_EXPORTS //***是工程名称的大写 #define ***_API extern "C" __declspec(dllexport) //***是工程名称的大写 该语句的含义是:用宏***_API 来表示 extern "C" __declspec(dllexport),表示函数是输出函数 #else #define ***_API extern "C" __declspec(dllimport) //***是工程名称的大写 #endif
然后就可定义接口函数
***_API int FunctionName(int x,int y);
2. dll工程修改为“应用程序类型”,测试接口
按照以下步骤修改工程属性:
(1) 配置属性--常规--配置类型:原来是“动态库(.dll)” 改为“应用程序(.exe)”
(2)配置属性--连接器--系统--子系统:原来是“窗口 (/SUBSYSTEM:WINDOWS)” 改为“控制台/SUBSYSTEM:CONSOLE)”
在工程中添加”main.cpp“
#include "**dll.h" int main() { //接口函数调用代码 return 0; }
在测试的时候,如果发现问题可以直接修改**dll.h和**dll.cpp中的问题并测试,当测试没有问题时,然后再把刚刚修改过的属性还原回来,就能生产dll和lib了,向其他调用系统提供了。