在windows上的实际开发过程中,算法模块会被打包生成动态库dll,给到软件调用。
以下会用c++创建一个加减乘除的动态库dll,并在另一个工程中,用main函数来调用该动态库。
在vs2019中新建一个名称为AddAlgorithm的空项目工程,添加以下文件:
add.h
#pragma once
#include <iostream>
extern "C" __declspec(dllexport) float add(float a, float b);
extern "C" __declspec(dllexport) float subtract(float a, float b);
extern "C" __declspec(dllexport) float multiply(float a, float b);
extern "C" __declspec(dllexport) float divide(float a, float b);
add.cpp
#include "add.h"
float add(float a, float b)
{
float c = a + b;
return c;
}
float subtract(float a, float b)
{
float c = a - b;
return c;
}
float multiply(float a, float b)
{
float c = a * b;
return c;
}
float divide(float a, float b)
{
float c = a / (b+0.000001);
return c;
}
main.cpp
#include "add.h"
int main()
{
float a = 3.0f;
float b = 1.5f;
printf("a + b = %.2f\n", add(a, b));
printf("a - b = %.2f\n", subtract(a, b));
printf("a * b = %.2f\n", multiply(a, b));
printf("a / b = %.2f\n", divide(a, b));
system("pause");
return 0;
}
在设计功能模块的入口函数时:
1. 入口函数在声明时要加上“__declspec(dllexport) ”,表明这是一个入口函数。
2. 如果你的动态库要在C#中托管调用,声明时要加上“extern "C" __declspec(dllexport)”;在C++中调用就不需要了。
这是一个简单的程序,会生成一个exe,通过该步骤将代码跑通,然后点击该工程,右键->属性->配置属性->常规->配置类型->动态库库(.dll),接着清理,重新生成,默认会在解决方案的根目录/x64/Debug下生成AddAlgorithm.dll和AddAlgorithm.lib。
在该解决方案中,再新建一个名称为AddDemo的空项目的工程,新建main.cpp,复制上面main.cpp里面的内容。
选中该项目,右键属性,设置引用的动态库的头文件路径,和lib路径
C/C++->常规->附加包含目录:
$(SolutionDir)\AddAlgorithm
链接器->常规->附加库目录:
$(SolutionDir)\x64\Debug
链接器->输入->附加依赖项:
AddAlgorithm.lib
编译,运行,即可实现对动态库dll的调用。
整个解决方案的目录结构: