也许这是一个蹩脚的问题,但是……
我问了一些关于delphi插件的问题。dll、bpl、OCX、脚本引擎有什么更好的方法...
我不想分发所有 *.bpls 及其所有依赖项...
我只需要一个包含 TForm 的 *.dll。并且该表单应放置在主机应用程序中。在 delphi 中没有直接支持这一点(非常可悲的情况)。存在一些解决方法,但是 Tab 键等存在问题......
所以非解决方法是完美的。
但也许还有另一种可能。将 dll 代码直接注入主机 *.exe。
所以 *.exe 会认为注入的代码是他自己的......而且很多问题(例如,表格中的制表键)应该消失了。可能吗?这不是一个肮脏的黑客,例如这种技术“以编程方式”合法吗?
(我没有代码注入的经验,也许我在这里说的话没有意义;)
最好的问候
彼得
[编辑]
澄清一些事情......当我们将 TForm 放入 dll 并且我们尝试这个时将表单嵌入到宿主*.exe 应用程序中,会出现很多问题。首先是错误“无法将 TFont 分配给 TFont”,但有一些解决方法。
其次是宿主应用程序将整个嵌入形式作为一个组件,因此您不能使用 Tab 键。(按 Tab 后,焦点将完全跳出嵌入形式)。我们也有一些解决方法,但它远非完美......
所以我有一个想法,如果我们向主机注入一些代码,也许主机会认为嵌入形式是他自己的代码,所以 tab 键会正在工作。
但正如我之前所说,我对注射一无所知,只是一个(也许)疯狂的想法;)
问问题
1547 次
1 回答
1
无需求助于您描述的任何黑客,这是完全可能的。例如:
library FormDLL;
uses
Windows,
Forms,
uMyForm in 'uMyForm.pas' {MyForm};
procedure ShowForm(MainFormHandle: HWND); stdcall;
begin
Application.Handle := MainFormHandle;
with TMyForm.Create(nil) do begin
ShowModal;
Free;
end;
end;
exports
ShowForm;
begin
end.
你几乎可以把你喜欢的任何东西放进去TMyForm
。另一方面,创建一个 Delphi 应用程序并添加以下代码来调用 DLL:
procedure ShowForm(MainFormHandle: HWND); stdcall; external 'FormDLL.dll';
procedure TMainForm.Button1Click(Sender: TObject);
begin
ShowForm(Handle);
end;
这表现得非常完美。
所以,恐怕你的问题并不明显。如果您可以提供更多详细信息,请提供。
于 2011-03-22T20:11:58.453 回答