在实际的企业级开发中,我们绝对不会 把所有的代码都塞在 main 函数里。通常,我们会把对 DLL 的调用封装在一个单独的类或者模块中,让 main 函数保持干净。
这里的核心思路是:把我们刚才在 main.cpp 里写的"黑科技"(相对路径引入头文件 + #pragma 链接库)转移到你新建的 .cpp 文件中。 这样不仅做到了代码隔离,还能隐藏 DLL 的实现细节。
下面新建一个 MyCalculator 类,在这个类的 .cpp 和 .h 文件中调用 DLL。
第一步:在项目中新建 .h 和 .cpp 文件
-
在 VS 的"解决方案资源管理器"中,右键点击
TestApp项目。 -
选择 "添加" -> "新建项"。
-
选择 "头文件(.h)" ,命名为
MyCalculator.h,点击添加。 -
再次右键点击项目,选择 "添加" -> "新建项"。
-
选择 "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;
}
第五步:编译并运行
-
确认之前的
MyMathDLL.dll依然静静地躺在你的x64/Debug文件夹里(和即将生成的TestApp.exe在一起)。 -
点击 "本地 Windows 调试器" (或按
F5) 运行。
你会看到控制台输出了由 MyCalculator 类封装打印的计算结果!