如何链接 DLL 以供 LoadLibrary() 使用(在 Windows 上的 C++ 中)并从调用 exe 导入变

How to link a DLL for LoadLibrary() use (in C++ on Windows ) and do import of variables from the calling exe

本文关键字:C++ 调用 导入 exe 上的 链接 何链接 DLL 以供 使用 LoadLibrary      更新时间:2023-10-16

在Windows上,我有一个程序可执行文件,它是通过Windows钩子注入DLL的目标。钩子通过强制它执行 LoadLibrary(( 将我的 DLL 注入到目标的程序空间中。我想将特定变量从 exe 导出到 DLL,以便 DLL 可以读取该变量的内容。

由于这是动态链接,因此链接器不会将 exe 和 DLL 链接在一起。我无法构建 DLL,因为我在我尝试从 exe 导入的变量上收到链接器错误 2001 - 未解析的外部。我尝试在DLL中使用它:extern "C" __declspec(dllimport( EGL_UINT8 *ssFrameDataBlock[];

但这并不能解决链接错误。显然我错过了一些步骤。如何从 exe 导出符号并将其导入 DLL 以进行动态链接?导出和导入的每一端的正确语法是什么?

你记得用__declspec(dllexport(装饰可执行文件对变量的定义吗?然后,您需要提供 exe 的 .lib 文件作为 DLL 生成的一部分。

如果不导出至少一个符号(无论是通过 dllexport 还是在 def 文件或命令行中的 EXPORTS 语句(,则不会生成 .lib 文件。

如果你不能为DLL版本提供.lib,你也可以从DLL代码中使用GetProcAddress(((尽管它的名字可以获取任何导出的地址,而不仅仅是函数(。