动态链接库lib+dll的开发和使用

    科技2022-07-11  102

    1. 实际需求

    调用别人写的程序,一般会以source(.h文件)+lib+dll的形式提供给我们使用我们自己写lib+dll提供给别人去使用自己做项目,为了避免工程过于庞大,一般会把一些常用的函数封装,以dll形式调用为了开发方便,每个人都应该有自己的工具类,此时,开发成为dll,最为方便…

    2. 环境

    Window10Microsoft Viusual Studio Community 2017

    3. 新建一个解决方案

    新建解决方案及一个项目(dll),勾选“为解决方案创建目录”同一个解决方案的不同项目的源码会在以解决方案为名称的目录下,以项目名称为目录的文件夹中存在

    4. 目录规范

    做实际项目,以及做开源项目,一般都会有目录规范规范的目录,在设置项目依赖时,可以用相对目录,移动项目位置,避免重新配置bin:存放可执行程序exe和动态链接库dlllib:存放lib

    5. 动态链接库项目配置

    删除自动生成的头文件和源文件,新建类 一个预编译头需要去掉 配置dll输出目录 配置lib输出目录

    6. 新建控制台应用程序

    为解决方案添加控制台项目 完整的目录树 将控制台应用程序设为该解决方案的启动项目

    7. 控制台应用程序配置

    配置项目之间的依赖关系 配置本项目exe输出目录 配置工作目录,避免出错 配置附加库目录位置 配置附加依赖项,添加lib库,写名字即可 配置附加包含目录,即导入头文件定义

    8. 源码

    CLib.h

    #pragma once //区分被dll调用还是其他地方调用dll #ifdef _WIN32 // 不区分32位和64位,WIN32,32位,_WIN64,64位 #ifdef TESTLIBDLL_EXPORTS // 库文件:导出 #define CDLL __declspec(dllexport) #else // 调用dll,导入 #define CDLL __declspec(dllimport) #endif #else // Linux/MAC:空的即可 #definde CDLL #endif class CDLL CLib { public: CLib(); ~CLib(); static int num; };

    CLib.cpp

    #include "CLib.h" #include <iostream> using namespace std; // 如果没有头文件预定义的导入导出,会在static成员访问上出错 int CLib::num = 0; CLib::CLib() { cout << "CLib Constructor"; } CLib::~CLib() { }

    ConsoleForTest.cpp

    #include <iostream> #include "CLib.h" using namespace std; int main(int argc, char* argv[]) { CLib lib; return 0; lib.num++; cout << lib.num; }

    高阶—>直接通过loaddll载入函数

    CLib.h中添加导出 CLib.cpp中定义 main中使用

    9. 总结

    参考本项目,可以导入别人写的的dll+lib+source的项目自己也可以开发一些dll,方便提供给他人使用自己的类本项目实际也是演示开发dll的一个工程,开发的时候,有一个控制台用于调试,其他的作为lib
    Processed: 0.019, SQL: 8