我正在尝试从我的程序中动态加载一个 exe 文件,并从该动态加载的 exe 中运行 SomeProcedure。这是我在加载的 exe 中所做的 - library.exe
interface
procedure SomeProcedure; stdcall;
implementation
procedure SomeProcedure;
begin
ShowMessage('Ala has a cat');
end;
这是我加载 library.exe 并尝试从中运行 SomeProcedure 的 exe。
type
THandle = Integer;
TProc = procedure();
var
AHandle: THandle;
Proc: TProc;
procedure TForm1.Button1Click(Sender: TObject);
begin
AHandle := LoadLibrary('library.exe');
if AHandle <> 0 then begin
@Proc := GetProcAddress(AHandle, 'SomeProcedure');
if @Proc <> nil then
try
Proc;
finally
FreeLibrary(AHandle);
end;
end;
end;
end;
不幸的是它不起作用 - AHandle 有一个地址,但 GetProcAddress 总是返回 nil。我究竟做错了什么?