前一段时间写外挂的时候,做了4个 dll 项目,每个 dll 对应一个功能点,一开始用起来没什么问题,但是后来发现游戏数据每周更新一次,我就要依次修改这四个项目中的 .h 头文件中的数据,是在太累人了 !
于是打算把所有的取数据函数都放在 .lib 文件里,供所有的 .dll 文件调用。这里只做一个简单的模拟。
首先打开 vs2015 创建一个 “静态库” 项目 “Test”:
在 Test.h 中添加如下代码:
#pragma once
int test();
在 Test.cpp 文件下添加如下代码:
#include "pch.h"
#include "Test.h"
int test() {
return 1;
}
点击 “生成解决方案” :
之后来到我的 .dll 项目中(其实其他一切 C++ 都可以)。右键项目-属性-所有配置-配置属性-链接器-输入-附加依赖项 , 写入你的 lib 文件名:
再进入 链接器-常规-附加库目录 , 将你 lib 文件路径添加进去:
在你程序的开头加入对 Test.lib 和 Test.h 的引用:
(注意 .h 头文件的路径应该根据实际情况而定!)
#include "..\..\Test\Test\Test.h"
#pragma comment(lib,"Test.lib")
在某个按钮事件中调用 Test.h 中的 test() 函数:
CString s;
s.Format("%d", test());
MessageBox("当前地图ID:" + s);
编译以下,报错:
error LNK2019: 无法解析的外部符号 __except_handler4_common,该符号在函数 __except_handler4 中被引用
解决办法:右键项目-属性-所有配置-配置属性-链接器-输入 。 将“忽略所有默认库” 改为 “否” , 在 “忽略特定默认库” 中添加 “libcmtd.lib” :
再次编译,没有问题:
使用 dll注入器 注入 dll 到游戏,点击刚刚我们编写的按钮,输出字符串 “1” :
完成。