微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在注入DLL文件中使用库

如何解决在注入DLL文件中使用库

我正在为一个游戏使用内部Mod菜单,并且我想使用DLL中的CPR库在注入后从服务器获取最新版本的偏移。现在,我获得了带有vcpkg的CPR软件包的静态版本,并将所有.lib文件和包含文件移动到我的项目中,并将它们添加到我的include和lib目录中,并像这样使用它:

#pragma once
#pragma comment(lib,"crypt32.lib")
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"zlib.lib")
#pragma comment(lib,"libcurl.lib")
#pragma comment(lib,"cpr.lib")

#include "cpr/cpr.h"

cpr::Response r = cpr::Get(cpr::Url{ "https://myurl.com/getoffset" });
                    cout << r.status_code << endl;
                    cout << r.text << endl; 
string json= r.text;

它工作正常,没有任何问题,但是您可以看到所有这些“ #pragma comment”都有些混乱,因此我尝试使用动态版本的CPR,因此在编译后我有3个DLL文件

  1. myMode.dll
  2. libcurl.dll
  3. zlib1.dll

现在的问题是,我必须在“ .exe”文件附近的游戏文件夹中放入“ zlib1.dll”和“ libcurl.dll”,否则它将无法注入;有什么方法可以将它们定位在我的DLL中并告诉DLL使用该位置?

还是像这样使用它,但是以某种方式删除此“ #pragma注释”并在Visual Studio中为所有这些对象添加位置?

解决方法

您需要了解的所有有关DLL搜索路径的信息都是well documented here

最简单的方法是仅静态链接libcurl和zlib,而不使用DLL存根库。这样做的缺点是什么?

否则,所有依赖的DLL都必须位于EXE文件夹,当前工作目录(通常与EXE文件夹相同),系统目录(否!)或PATH中。

如果您的扩展程序具有安装程序,则可能只是使用DLL的安装文件夹及其所有依赖项来更新PATH。

对于“混乱” pragma comment语句。标准方法是通过Visual Studio项目IDE添加它们。这样可以更好地控制链接搜索路径,因此您不必将所有stub .lib文件都转储到构建时所在的文件夹中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。