gpt4 book ai didi

delphi - 在 Delphi 7 中直接从内存加载 DLL

转载 作者:行者123 更新时间:2023-12-02 14:15:20 27 4
gpt4 key购买 nike

我将一个dll文件放入资源文件(*.res)

ProjectTestLibrary.dll

library ProjectTestLibrary;

uses SysUtils, Classes, Dialogs;

{$R *.res}

procedure DllMessage; export;
begin
ShowMessage('Hello world from a Delphi DLL');
end;

exports DllMessage;

begin
end.

MyTestDLL.rc

TestDLL RCDATA ProjectTestLibrary.dll

通过该命令行生成MyTestDLL.res

BRCC32 ProjectTestLibrary.rc

主窗体

implementation
{$R *.dfm}
{$R MyTestDLL.RES}

procedure DllMessage; stdcall; external 'ProjectTestLibrary.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
DllMessage;
end;

然后出现错误
此应用程序无法启动,因为找不到 ProjectTestLibrary.dll。

我明白这个问题是因为 dll 文件还不存在。
所以我删除了“DLLMessage;” onButton1Click 中的代码。
然后在FormCreate上,我添加了:

procedure TForm1.FormCreate(Sender: TObject);
var ms : TMemoryStream;
rs : TResourceStream;
begin
if 0 <> FindResource(hInstance, 'TestDLL', RT_RCDATA) then
begin
rs := TResourceStream.Create(hInstance, 'TestDLL', RT_RCDATA);
ms := TMemoryStream.Create;
ShowMessage('Found');
end else
begin
ShowMessage('Not Found');
end;
end;

我再次运行它,然后弹出消息说“找到”

我的问题是:
1.如何保存在内存中(而不是PC硬盘中),最后
2.使用其过程/函数(过程DLLMessage)

最佳答案

尽管存在模拟 Windows PE 加载程序的技术,并且允许您直接从内存缓冲区加载 DLL,而不必将其存储在磁盘上,但没有官方的方法可以做到这一点。

下面是一个 Delphi 实现,例如 DLL 内存加载器: https://github.com/DSPlayer/memorymodule

关于delphi - 在 Delphi 7 中直接从内存加载 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41843971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com