gpt4 book ai didi

delphi - 函数 EXE 到 DLL (Delphi)

转载 作者:行者123 更新时间:2023-12-03 02:37:53 25 4
gpt4 key购买 nike

我正在调整我的应用程序以使用单独的模块(插件)。

我已经成功地让我的 EXE 应用程序读取并加载插件,包括表单。

现在我需要执行相反的操作,将函数从可执行文件导出到 DLL。

示例:在我的可执行文件中,它有一个 TMemo 组件。我想创建一个这样的函数

function GetMemo(): widestring;

在我看来,无论谁编写了 DLL 插件,当调用函数 GetMemo() 时,都已经获取了 DLL 中 TMemo 的内容。

可能吗?

最佳答案

处理这个问题的最简单方法是定义函数指针记录,然后让 EXE 在初始化每个插件时将该记录的实例传递给每个插件。然后,EXE 可以根据需要实现函数并将它们传递给插件,而无需像 DLL 那样实际从其 PE 导出表中导出它们。

例如:

type
PPluginExeFunctions = ^PluginExeFunctions;
PluginExeFunctions = record
GetMemo: function: WideString; stdcall;
...
end;

function MyGetMemoFunc: WideString; stdcall;
begin
Result := Form1.Memo1.Text;
end;

...

var
ExeFuncs: PluginExeFunctions;
hPlugin: THandle;
InitFunc: procedure(ExeFuncs: PPluginExeFunctions); stdcall;
begin
ExeFuncs.GetMemo := @MyGetMemoFunc;
...
hPlugin := LoadLibrary('plugin.dll');
@InitFunc := GetProcAddress(hPlugin, 'InitializePlugin');
InitFunc(@ExeFuncs);
...
end;

var
ExeFuncs: PluginExeFunctions;

procedure InitializePlugin(pExeFuncs: PPluginExeFunctions); stdcall;
begin
ExeFuncs := pExeFuncs^;
end;

procedure DoSomething;
var
S: WideString;
begin
S := ExeFuncs.GetMemo();
...
end;

关于delphi - 函数 EXE 到 DLL (Delphi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46772580/

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