快捷搜索: 王者荣耀 脱发

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.运行即可。

经验分享 程序员 微信小程序 职场和发展