在一个单独的类或者模块中调用动态库

在实际的企业级开发中,我们绝对不会 把所有的代码都塞在 main 函数里。通常,我们会把对 DLL 的调用封装在一个单独的类或者模块中,让 main 函数保持干净。

这里的核心思路是:把我们刚才在 main.cpp 里写的"黑科技"(相对路径引入头文件 + #pragma 链接库)转移到你新建的 .cpp 文件中。 这样不仅做到了代码隔离,还能隐藏 DLL 的实现细节。

下面新建一个 MyCalculator 类,在这个类的 .cpp.h 文件中调用 DLL。

第一步:在项目中新建 .h.cpp 文件

  1. 在 VS 的"解决方案资源管理器"中,右键点击 TestApp 项目。

  2. 选择 "添加" -> "新建项"

  3. 选择 "头文件(.h)" ,命名为 MyCalculator.h,点击添加。

  4. 再次右键点击项目,选择 "添加" -> "新建项"

  5. 选择 "C++ 文件(.cpp)" ,命名为 MyCalculator.cpp,点击添加。

此时,项目目录中多了这两个文件。

第二步:编写头文件 (MyCalculator.h)

在头文件中,我们只做声明。注意:这里不需要引入 DLL 的任何东西! 我们要让外部完全感觉不到 DLL 的存在。

打开 MyCalculator.h,输入以下代码:

复制代码
#pragma once

// 这是一个普通的 C++ 类,用来封装对 DLL 的调用
class MyCalculator {
public:
    // 构造函数
    MyCalculator();

    // 封装一个计算并打印的方法
    void calculateAndPrint(int a, int b);
};

第三步:编写源文件 (MyCalculator.cpp) ------ 魔法转移!

这里是关键!我们需要把包含 DLL 头文件和链接 .lib 的指令写在这里。

打开 MyCalculator.cpp,输入以下代码:

复制代码
#include "MyCalculator.h"
#include <iostream>

// 【关键点 1:把黑科技移到这里】
// 相对路径包含 DLL 的头文件
#include "include/MathFuncs.h" 

// 【关键点 2:在这里链接 .lib 文件】
#pragma comment(lib, "lib/MyMathDLL.lib") 

// 构造函数实现
MyCalculator::MyCalculator() {
    std::cout << "MyCalculator 对象已创建,准备使用 DLL 工具箱!" << std::endl;
}

// 核心计算方法的实现
void MyCalculator::calculateAndPrint(int a, int b) {
    std::cout << "--- 正在 MyCalculator 类内部调用 DLL ---" << std::endl;
    
    // 直接调用 DLL 提供的 Add 和 Subtract 函数
    int sum = Add(a, b);
    int sub = Subtract(a, b);

    std::cout << a << " + " << b << " = " << sum << std::endl;
    std::cout << a << " - " << b << " = " << sub << std::endl;
    std::cout << "----------------------------------------" << std::endl;
}

为什么这样做很优雅? 因为 #pragma comment#include "include/MathFuncs.h" 都在 .cpp 文件里。这意味着,如果在其他地方(比如 main.cpp)包含了 MyCalculator.h,它们完全不知道 MathFuncs.h.lib 的存在。这就是典型的高内聚、低耦合

第四步:让 main 函数变得极其清爽 (TestApp.cpp)

现在回到你的主程序 TestApp.cpp。清空之前的内容,改为:

复制代码
#include <iostream>
// 我们现在只需要包含自己的类,不需要管 DLL 了!
#include "MyCalculator.h" 

int main() {
    std::cout << "主程序启动..." << std::endl;

    // 实例化你刚才写的类
    MyCalculator myCalc;

    // 调用类的方法,DLL 的调用在类内部悄悄完成了
    myCalc.calculateAndPrint(500, 200);

    std::cout << "主程序运行结束,按任意键退出..." << std::endl;
    std::cin.get(); 
    
    return 0;
}

第五步:编译并运行

  1. 确认之前的 MyMathDLL.dll 依然静静地躺在你的 x64/Debug 文件夹里(和即将生成的 TestApp.exe 在一起)。

  2. 点击 "本地 Windows 调试器" (或按 F5) 运行。

你会看到控制台输出了由 MyCalculator 类封装打印的计算结果!

相关推荐
豆沙沙包?4 小时前
C++~~~stack容器、queue容器、list容器(p45-P56)
c++·windows·list
Data_Journal4 小时前
用于网页抓取的 Node-unblocker
大数据·开发语言·数据库·python·scrapy
豆角焖肉4 小时前
SSM 聚合项目搭建:多 Maven 模块项目
开发语言·python·pycharm
Frank_refuel4 小时前
【C++八股】面向对象
开发语言·c++
h_a_o777oah4 小时前
【图论】Tarjan 缩点:解决有向图中环的问题
c++·算法·图论·acm·强连通分量·缩点·tarjan
m0_380743875 小时前
为 OpenAI 兼容接口配置教程
开发语言·python·node.js
万邦科技Lafite6 小时前
阿里巴巴拍立淘按图搜索商品API返回值实践:提升用户购物满意度的关键措施
开发语言·api·开放api·电商开放平台·京东开放平台
别动我齐刘海6 小时前
机器人运动控制学习4——状态估计 State Estimation
c++·人工智能·学习·目标检测·机器学习·机器人·自动驾驶
学习星球7 小时前
OpenHarness 全面配置教学——从游戏开发工作流引入
c++·游戏·ai·ai编程
小小龙学IT7 小时前
Qt 6 跨平台开发完全指南:从信号槽机制到实际项目落地
开发语言·qt