c++动态链接库(dll)中添加空的控制台程序,调用dll进行测试
在编写c++中的dll文件时,每次测试都需要导出来,再拉到一个新的工程项目中进行测试,每次测试一次都要重新导出和配置,该方法比较繁琐,想寻找更方便的解决方式,便有这次记录。
使用工具visual studio2022
一、创建dll库
新建一个dll库
选择DLL项目模板
为DLL项目添加项目名,这里采用DllFirstTest,然后创建
二、编写dll文件代码
创建完项目模板之后,在DLL项目新建一个头文件一个主文件,这里新建firstlib.h和firstlib.cpp
在firstlib.h中写入我们需要的函数,同时需要添加导入\导出函数,本次测试函数,firstlib.h实现如下:
#pragma once #ifdef FIRSTLIB_EXPORTS #define FIRSTLIB_API __declspec(dllexport) #else #define FIRSTLIB_API __declspec(dllimport) #endif #include <iostream> #include <string> #include <opencv2/opencv.hpp> class FIRSTLIB_API FirstLib { public: int add(int a,int b); int multiply(int a,int b); }接下来实现firstlib.cpp文件。在firstlib.cpp文件导入头文件,并实现头文件中注册的函数,注意要文件顶部定义导出宏,firstlib.cpp文件如下:
#define FIRSTLIB_EXPORTS #include <iostream> #include <string> #include "firstlib.h" int FirstLib::add(int a, int b) { return a + b; } int FirstLib::multiply(int a,int b) { return a * b; }三、生成dll文件
当头文件及实现文件编写完毕之后,生成dll文件。生成步骤:1、选择动态链接库项目->鼠标右键->选择生成(生成过的可点击重新生成)。
等待程序执行完成之后,在visual studio下方输出框会提示生成文件存放目录:
四、新建控制台应用程序
选择在DllFirstTest动态链接库同一个解决方案下面新建一个新的控制台应用程序,创建步骤:选择解决方案->右键选择添加->新建项目,操作如下图:
选择控制台程序,空白程序或者默认输出的都可以
这里命名TestFirstLib,然后点击创建
五、配置控制台程序,调用DLL
配置控制台程序,希望TestFirstLib测试项目能够:1、找到firstlib.h头文件,2、链接DllFirstLib.lib,3、测试程序运行时能够找到DllFirstTest.dll
1、设置项目依赖关系
添加依赖,确保项目生成顺序正确。
操作如下:选择TestFirstLib->右键生成依赖项->项目依赖项
在打开窗口,勾选DLL库(DllFirstTest)
勾选依赖项之后,如果依赖库更新过,在编译TestFirstLib编译时,会先对DllFirstTest进行编译。
2、配置测试项目,使其能够找到头文件和库文件
方法一:
操作方法如下:选择TestFirstLib->右键选择添加->引用
在打开窗口,选择DllFirstTest链接库
经过这个操作之后,会将DllFirstLib的头文件目录添加到TestFirstLib的包含路径;将DllFirstLib生成的.lib文件链接到TestFirstLib。
方法二:
该方法为手动链接
链接头文件:右键TestFirstLib→ 属性 → C/C++ → 常规 → 附加包含目录 → 添加FirstLib项目的源码目录
在属性页内操作:
选择到dll库文件中头文件所在的目录:
链接库文件:
右键TestFirstLib→ 属性 → 链接器 → 常规 → 附加库目录 → 添加 DllFirstLib的输出目录
注意此处x64与Debug要与自己的配置选择一样的,x86就选择x86,release就选择release。
添加附加依赖项,添加.lib文件
操作如下:仍在属性页面->连接器->输入->附加依赖项
这里选择的是库文件目录下面的.lib文件,名称格式为:DLL库名称.lib。
3、确保测试文件找到DllFirstLib.dll
dll文件必须在exe运行时,能被加载,最简单的办法就是将生成的DllFirstLib.dll文件直接复制到与TestFirstLib.exe同一个文件夹下。
至此配置完成之后,即可在测试程序中直接调用dll库文件。
六、编写测试程序,调用dll库文件
在测试程序中,新建一个main.cpp,在其中导入firstlib.h头文件,调用dll库程序。
编码如下:
#include <iostream> #include "firstlib.h" #include <string> int main() { std::cout << "hello world!" << std::endl; FirstLib fs; std::cout << "add sum:" << fs.add(3, 2) << std::endl; std::cout << "add sum:" << fs.multiply(3, 2) << std::endl; return 0; }运行程序,查看结果:
至此,调用完成。
C++新人,不足甚多,请海涵,有问题评论区可以提出交流,欢迎大家!
