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

在实际的企业级开发中,我们绝对不会 把所有的代码都塞在 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 类封装打印的计算结果!

相关推荐
乐世东方客10 分钟前
Nacos-2.1.0问题-自己记录
开发语言·python
qiqsevenqiqiqiqi14 分钟前
MT2048三连 暴力→数学推导→O (n) 优化
数据结构·c++·算法
ximu_polaris19 分钟前
设计模式(C++)-行为型模式-模版方法模式
c++·设计模式
码之气三段.20 分钟前
十五届山东ccpc省赛补题(update)
数据结构·c++·算法
每天吃饭的羊38 分钟前
UMD和IIfe
开发语言·前端·javascript
gCode Teacher 格码致知1 小时前
Javascript提高:自定义的占位符替换-由Deepseek产生
开发语言·javascript·ecmascript
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【跳跃与过河问题】:过河问题
c++·算法·贪心·csp·信奥赛·跳跃与过河问题·过河问题
是个西兰花1 小时前
C++11:智能指针
开发语言·c++·智能指针·rall
摇滚侠1 小时前
Java 零基础全套视频教程,面向对象(高级),笔记 105-120
java·开发语言·笔记
CN-Dust1 小时前
【C++专题】输出cout例题
开发语言·c++