C++程序封装为动态链接库(dll文件)及使用
把C++程序打包为动态链接库(dll文件)给别人,这样别人只能通过我们定义的接口函数实现程序的功能,而无法知道程序的具体实现代码。
一、将C++程序封装为动态链接库
VS 新建一个“动态链接库(DLL)”(此处命名为:Dll1,保存路径:E:DllProject )项目后: 1.将C++程序所有使用到的.h头文件、.cpp源文件复制到该“动态链接库(DLL)”项目的文件夹中; 2.手动添加所有的.h头文件和.cpp源文件; 3.在其pch.h文件,加入以下语句:
#ifdef IMPORT_DLL #else #define IMPORT_DLL extern "C" _declspec(dllexport) #endif IMPORT_DLL int myfun(double* Param, int Flag); //此句根据自己需要修改接口函数, 此处举例为:int myfun(double* Param, int Flag)
4.在其pch.cpp文件,编写函数 myfun(double* Param, int Flag) 的具体实现程序,例如:
#include <math> #include <iostream> #include <fstream> using namespace std; int myfun(double* Param, int Flag) { ifstream in_file("input.txt"); if(!in_file) { cerr<< "oops! "; return -1; } FILE *fp; fp=fopen(".\outfile\Tra.dat","w"); setbuf(fp,NULL); fprintf(fp,"t/s X/m Y/m Z/m",Flag,Param[0],Param[1],Param[2]); fflush(fp); fclose(fp); return 0; }
5.调试(查看输出栏,显示生成成功即可,提醒 “不是有效win32程序” 没关系); 自动生成 .dll 文件和 .lib文件(此处所在路径:E:DllProjectDll1X64Debug);
6.将所有.h头文件、 .dll 文件和 .lib文件及其他需要的文件夹,复制打包到"TraSolve"文件夹。
二、使用封装好的动态链接库(dll文件)
VS新建一个“空项目”(此处命名为:project1,假如保存路径:E:DllProject )后: 1.复制上面打包的"TraSolve"文件夹下的全部文件到“project1”项目的文件夹(路径:E:DllProjectproject1project1); "TraSolve"文件夹中一般有以下4类: 1).h头文件 2).dll资源文件 3).lib资源文件 4)其他 2.手动添加步骤1中所有的.h头文件和.dll、.lib资源文件; 3.右击 "源文件" 新建一个.cpp文件,并编写int main(){ ... ... }函数:
#include "pch.h" #include "stdio.h" int main() { //通过上面定义的接口函数 myfun(double* , int, ... ) 调用被封装的C++程序 //(调用格式见 pch.h 文件); }
4.配置属性—>VC++ 目录—>库目录,选择为.dll文件所在文件夹路径(如:E:DllProjectproject1project1); 5.配置属性—>链接器—>输入—>附加依赖项,添加.lib文件名及后缀(如: Dll1.lib); 6.运行即可。