您的位置:首页 > 编程语言 > C语言/C++

C++ 调用 .lib 文件中的函数

2019-06-12 21:48 1646 查看

前一段时间写外挂的时候,做了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” :
完成。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: