使用注入DLL文件中的库

Use libraries inside injection DLL file

本文关键字:文件 DLL 注入      更新时间:2024-09-27

我正在为一个游戏开发内部mod菜单,我想在DLL中使用CPR库,以便在注入后从服务器获得最新版本的偏移量。现在,我用vcpkg获得了CPR包的静态版本,并将所有.lib文件和include文件移动到我的项目中,将它们添加到我的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注释"所以我尝试使用CPR的动态版本,所以在编译它之后,我有3个DLL文件:

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

现在的问题是;zlib1.dll";以及";libcurl.dll";在.exe文件附近的游戏文件夹内,否则不会注入;有什么方法可以在我的DLL中找到它们并告诉DLL使用那个位置吗?

或者只是这样使用它,但去掉这个"#pragma注释"不知怎么的,在visualstudio中为他们添加位置?

您需要了解的关于DLL搜索路径的一切都在这里有很好的文档记录。

最简单的方法是只使用libcurl和zlib静态链接,而不是使用DLL存根库。这有什么不利之处?

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

如果您的扩展有一个安装程序,那么它可能只是用DLL的安装文件夹及其所有依赖项更新PATH。

至于";凌乱的";pragma comment语句。标准方法是通过VisualStudio项目IDE添加这些。这样可以更好地控制链接搜索路径,这样就不必将所有stub.lib文件都转储到构建的同一文件夹中。