【发布时间】:2011-07-20 19:09:10
【问题描述】:
也许这是一个蹩脚的问题,但是……
我问了一些关于delphi插件的问题。 dll、bpl、OCX、脚本引擎有什么更好的方法...
我不想分发所有 *.bpls 及其所有依赖项...
我只需要一个包含 TForm 的 *.dll。并且该表单应放置在主机应用程序中。
在 delphi 中没有直接支持这一点(非常可悲的情况)。存在一些解决方法,但 Tab 键等存在问题...
所以非解决方法是完美的。
但也许还有另一种可能。 将dll代码直接注入主机*.exe。
所以 *.exe 会认为注入的代码是他自己的......而且很多问题(例如表单中的制表键)应该消失了。
可能吗?这不是一个肮脏的黑客,例如这种技术“以编程方式”合法吗?
(我没有代码注入经验,也许我在这里说的没有意义;)
最好的问候
彼得
[已编辑]
澄清一些事情......当我们将 TForm 放入 dll 中,然后尝试将此表单嵌入到主机 *.exe 应用程序中时,会出现很多问题。首先是错误“无法将 TFont 分配给 TFont”,但有一些解决方法。
其次是宿主应用程序将整个嵌入形式作为一个组件,因此您不能使用 Tab 键。 (按 Tab 后,焦点将完全跳出嵌入形式)。我们也有一些解决方法,但它远非完美......
所以我有一个想法,如果我们向主机注入一些代码,也许主机会认为嵌入的形式是他自己的代码,所以 Tab 键会起作用。
但正如我之前所说,我对注射一无所知,只是一个(也许)疯狂的想法;)
【问题讨论】:
-
创建一个显示完美运行的 VCL 表单的 DLL 没有任何问题。我将使用的标准示例是 Office COM 加载项。我有其中之一,使用 Add-in Express 编写的。这是一种享受。你的问题出在其他地方,你肯定需要在任何地方注入任何东西!
-
这个问题太开放了,如果你在你的问题中解决具体问题会更好。例如,通过使 exe think 注入的代码是它自己的代码来解决什么问题? AFAIK,在 Delphi 应用程序中使用来自 dll 的表单没有通用选项卡问题,我真的看不出如何用这种方法解决这个问题,因为问题可能是全局对象,DLL 中包含的表单将不同于主机应用程序的全局对象。用您的话来说,问题在于 dll 代码对自己的看法,而不是 exe 对 dll 的看法。