也许这是一个蹩脚的问题,但尽管如此...
我问了一些关于delphi插件的问题。什么是更好的方式DLL,bpl,OCX,脚本引擎...
我不想分发所有* .bpls,以及它的所有依赖关系...
我需要的是一个* .dll其中包含一个TForm 。并且该表单应该放入主机应用程序中。 在德尔福没有直接的支持(非常悲伤的情况)。有一些解决方法存在,但有问题的选项卡等...
所以非解决方法是完美的。
但也许有另一种可能性。 将dll代码直接注入到主机* .exe中。 所以* .exe会认为注入的代码是他自己的......并且很多问题(例如在表单中使用Tab键)应该消失。 这可能吗?这不是一个肮脏的黑客攻击,例如该技术是“编程式”合法吗?
(我有代码注入没有经验,也许它不会使SENCE我在说什么在这里;)
问候
彼得
[编辑]
为了澄清一些事情...当我们在dll中放入一个TForm并且我们试图将这个表单嵌入到主机* .exe应用程序中时,出现了很多问题。首先是一个错误“无法将TFont分配给TFont”,但是有一些解决方法。
其次是宿主应用程序将整个嵌入表单作为一个组件使用,因此您不能使用Tab键。 (按下标签后,焦点将完全跳出嵌入的表格)。我们也有一些解决方法,但它远离完美...
所以我有一个想法,如果我们注入一些代码给主机,也许主机会认为emebeded形式是他自己的代码,所以选项卡关键将工作。但是,正如我之前所说,我不知道任何关于注入,只是一个(可能)疯狂的想法;)使用注入的dll代码作为delphi * .dll插件,其中包含TForm
回答
这是完全有可能的,而不依赖任何你描述的黑客。例如:
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
。另一方面创建一个德尔福的应用程序,并添加以下代码来调用该DLL:
procedure ShowForm(MainFormHandle: HWND); stdcall; external 'FormDLL.dll';
procedure TMainForm.Button1Click(Sender: TObject);
begin
ShowForm(Handle);
end;
这表现得很完美。
所以,恐怕不是很明显你的问题是什么。如果您可以提供更多详细信息,请执行此操作。
你是对的,但在某些情况下,表单不会出现,你应该在一个单独的线程中调用ShowModal ...我创建了一个应用程序,迫使yahoomessenger加载dll,当我呼叫showmodal表单立即消失,所以我用CreateThread,它工作得很好 – opc0de 2011-03-22 21:49:54
@ opc0de很难评论,不知道细节,但它听起来不像你有一个当你说“强迫Y!messanger加载DLL”的合作系统。 – 2011-03-22 21:54:31
是的,你的代码工作完美,但有SHOWMODAL。但是,当我们需要从dll嵌入到主机的情况下呢? (请参阅我的[“编辑”]问题) – Peter 2011-03-23 20:37:03
- 1. DLL注入代码
- 2. 使用C#DLL作为COM下的Delphi
- 3. 在Delphi中使用DLL注册
- 4. 依赖于其他DLL的插件DLL
- 5. 从C#代码调用delphi DLL方法
- 6. 从C#调用delphi DLL函数代码
- 7. 使用C的dll注入
- 8. .DLL注释包含在.XML中
- 9. 在C++中使用Delphi DLL
- 10. 在delphi中使用dll ocx
- 11. 如何包含已包装到新dll中的dll文件?
- 12. 在vba中导入Delphi dll
- 13. 如何使用dll注入?
- 14. 如何创建DLL其中将包含
- 15. Delphi代码注入
- 16. C++ - 将代码注入正在运行的进程(使用DLL)
- 17. Delphi DLL - TClientSocket事件
- 18. SetWinEventHook - Dll注入?
- 19. 为什么许多nHibernate示例代码实例包含Castle dll?
- 20. 灿.netCore DLL从本机代码使用像C++/Delphi的
- 21. 如何在托管代码中的C++ dll中为其他dll创建方法?
- 22. 注入dll到exe文件
- 23. DLL包含在exe.file中?
- 24. 在Ansi-C导入Delphi Dll
- 25. 将Pchar Delphi DLL导入C#?
- 26. 使用本机代码DLL的Excel 2016 VSTO插件
- 27. 为什么64位COM DLL无法使用Delphi XE3注册
- 28. 如何使用Delphi代码调试VC++中内置的DLL文件?
- 29. 注入DLL中的C#文件
- 30. 如何制作包含DLL的Jar?
无论创建一个显示VCL表单完美行为的DLL,都没有任何问题。我将使用的标准示例是Office COM加载项。我有一个使用Add-in Express编写的程序。它工作的一种享受。你的问题在别处,你肯定需要在任何地方注入任何东西! – 2011-03-22 20:03:30
这个问题太开放了,如果你解决你的问题中的特定问题会更好。例如,通过使exe_think_注入的代码是自己的代码解决了什么问题? AFAIK,在Delphi应用程序中没有使用来自dll的表单的通用选项卡问题,我真的不知道如何用这种方法解决这个问题,因为问题可能是全局对象,DLL中包含的表单将不同于主机应用程序的全局对象。用你的话说,问题在于dll代码对自己的想法,而不是exe对dll的看法。 – jachguate 2011-03-22 20:12:14