VS封装C++项目以及属性配置

目录

1. 封装单个项目

1.1 封装

2. 一个解决方案下封装多个项目,单独打包

3. 示例文件

3.1 生成DLL的文件

3.2 配置完成调用DLL


1. 封装单个项目

1.1 封装

新建C++空项目,将需要封装的源文件(eval.cpp)和 头文件(eval.h)复制过来,并对它们做如下修改:

注:如果有多个头文件和源文件,只对可供外部调用的文件及其内部的函数作下面的处理

  • 分别在源文件和头文件的前面添加
// eval.h

// 下列 ifdef 块是创建使从 DLL 导出更简单的 宏的标准方法。
// 此 DLL 中的所有文件都是用命令行上定义的 EVALDLL_EXPORTS符号编译的。
// 在使用此 DLL 的任何其他项目上不应定义此符号。
// 这样,源文件中包含此文件的任何其他项目都会将
// EVALdDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef EVALDLL_EXPORTS // 名字随意,源文件和头文件对应即可
#define EVALdDLL_API __declspec(dllexport)
#else
#define EVALdDLL_API __declspec(dllimport)
#endif
// eval.cpp

// 添加这一句
#define EVALDLL_EXPORTS // 需要放在#include "eval.h"前面

#include "eval.h"
  • 头文件中的类、函数和变量的声明做如下变化:
// eval.h

// 类的导出
class EVALdDLL_API EvalDLL {
public:
        // TODO:在此添加方法
        int add(int a, int b);
};

// 函数的导出
extern "C" { // extern "C"告诉编译器该部分可以在外部的C/C++中使用
        EVALdDLL_API int multi(int a, int b);
        EVALdDLL_API void print(int a, int b);
}

// 变量的导出
extern "C" EVALdDLL_API int eval;

参考 使用vs封装c++成dll和lib

  • 项目 >> 属性 >> 常规 >> 配置类型中把原来的应用程序(.exe)改为动态库.dll

还可以根据生成方式更改目标文件名、更改输出目录将生成的dll、lib文件放到其他地方,比如 debug方式可以在$(ProjectName)后加d

  • 生成 >> 生成解决方法即可!!

*.h、eval.h、evald.dll、evald.lib是我们需要的文件

1.2  配置

新建includex64文件夹,将上面的文件按如下方式归类:

./include/*.h

./x64/Debug/bin/evald.dll

./x64/Debug/lib/evald.lib

注:若项目包含多个头文件,都需要放到include文件夹下

然后

  • 新建一个空项目,生成 >> 编译
  • eval.dll放到整个工程目录的ProjectName/x64/Debug目录下
  • 项目 >> 属性 >> 链接器 >> 输入 >> 附加依赖项将打包好的 evald.lib 的文件名及后缀加进去,即 evald.lib
  • VC++目录 >> 包含目录,将./include的路径加进去
  • VC++目录 >> 库目录,将./lib的路径加进去

参考  如何使用vs将C++项目打包成一个dll

2. 一个解决方案下封装多个项目,单独打包

如果需要同时生成多个DLL,则在一个解决方案下包含多个项目

文件 >> 新建项目 >> 添加到解决方案

并更改每个项目的配置类型即可,注意区分不同项目前面的定义

项目1

项目2

参考 VS单解决方案多项目多DLL多exe管理

3. 示例文件

3.1 生成DLL的文件

// eval.h
#pragma once
#include <iostream>

#ifdef EVALDLL_EXPORTS
#define EVALdDLL_API __declspec(dllexport)
#else
#define EVALdDLL_API __declspec(dllimport)
#endif

// 类的导出
class EVALdDLL_API Eval {
public:
        // TODO:在此添加方法
        int add(int a, int b);
};

// 函数的导出
extern "C" { // extern "C"告诉编译器该部分可以在C/C++中使用
        EVALdDLL_API int multi(int a, int b);
        EVALdDLL_API void print(int a, int b);
}

// 变量的导出
extern "C" EVALdDLL_API int eval;
// eval.cpp

#define EVALDLL_EXPORTS // 放在 #include "eval.h" 前面

#include "eval.h"

int Eval::add(int a, int b) {
        return a + b;
}


int multi(int a, int b) {
       return a * b;
}
void print(int a, int b) {
       std::cout << "a * b = " << a * b;
}


int eval = 4;

3.2 配置完成调用DLL

C++
#include "eval.h"

#include <iostream>

int main() {
        Eval eval;

        std::cout << eval.add(3, 4) << std::endl;
        std::cout << multi(3, 4) << std::endl;
        print(4, 4);

        std::cout << eval2 << std::endl;

        return 0;
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值