我正在调整我的应用程序以使用单独的模块(插件)。
我已经成功地让我的 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/