C++ 从C/C+;中的内存加载64位DLL+;(Win64)

C++ 从C/C+;中的内存加载64位DLL+;(Win64),c++,dll,win64,C++,Dll,Win64,请告知我如何从C/C++中的内存加载64位DLL, 我正在运行Windows 64位模式,我发现很少有解决方案 Win32,但没有一个可以正确使用64位 我不想创建任何临时文件,我想 将所有req DLL放入单个.bin文件并延迟加载DLL 进入我的.exe程序 最欢迎链接和示例源代码 谢谢您可以在运行时在内存中加载和执行代码,而无需临时文件。严格来说,它不是DLL,只是动态代码 您将需要在运行时生成代码的程序所使用的相同API函数(现在许多语言都有即时编译器) 原则上,只有三个步骤: 将机器

请告知我如何从C/C++中的内存加载64位DLL, 我正在运行Windows 64位模式,我发现很少有解决方案 Win32,但没有一个可以正确使用64位

我不想创建任何临时文件,我想 将所有req DLL放入单个.bin文件并延迟加载DLL 进入我的.exe程序

最欢迎链接和示例源代码


谢谢

您可以在运行时在内存中加载和执行代码,而无需临时文件。严格来说,它不是DLL,只是动态代码

您将需要在运行时生成代码的程序所使用的相同API函数(现在许多语言都有即时编译器)

原则上,只有三个步骤:

  • 将机器代码放入动态分配的内存中。无论是从文件中读取、通过网络传输还是使用编译器生成,都无关紧要
  • 将包含代码的页面标记为可执行。在Windows上,这是通过
    VirtualProtect
    完成的。在Linux上,
    mprotect
  • 同步指令和数据缓存(现代CPU是哈佛和冯·诺依曼体系结构的混合体)。在Windows上,这是
    FlushInstructionCache
后两个项目需要包含代码的缓冲区的基址和大小

更困难的是处理具有依赖关系的代码。因为您没有使用OS加载程序,所以没有静态导入解析和修复。如果您的代码是针对这种情况设计的(接受指向主机应用程序数据的指针作为函数参数,并在所有外部交互中使用它),那么这不一定是个问题。但是,由于您是从DLL的角度来考虑的,所以它很可能是


不过,这远不是一个无法克服的问题。在进行修复和导入之前,先让一个独立于位置的函数开始工作。

你不能简单地将这些要“从内存加载”的库静态链接到你的.exe吗?据我所知,从内存加载DLL实际上是不可能的。至少不使用Windows API。当然,您可以编写自己的PE加载程序,但这将是相当多的工作…不幸的是,我有一些dll没有静态版本可用(如fmodex.dll),您是对的,我已经为艰苦的工作做好了准备…谷歌快速显示这里有一个额外的链接(来自同一作者):这一个解释了过程。