从DLL访问VCL表单

时间:2013-04-22 10:49:49

标签: delphi dll delphi-xe2 vcl

我有两个进程A和B.进程A是一个包含表单TMainForm的VCL表单应用程序。进程B是一个DLL,我想从中远程控制这个表单。某事(在过程B中):

MainForm := TMainForm.Create (nil);
MainForm.Handle := FindWindow ('TMainForm', 'MainForm Title');  // does not compile

// These two lines should remote-control the form in process A
MainForm.Edit1.Text := 'Test';
MainForm.Button1.Click;

任何想法是否以及如何做到这一点?

1 个答案:

答案 0 :(得分:3)

如果您确实有两个独立的进程,那么您需要进程间通信(IPC)。例如,您可以将进程A转换为进程外COM服务器,该服务器由进程B以Office自动化的方式使用。这是许多人的一种选择,但它们都需要IPC。

但是,听起来有点像你在同一个进程中有可执行文件和DLL。在这种情况下,您有两个独立的VCL实例。这意味着您无法在两个模块之间传递TForm对象或任何其他VCL对象。实际上,由于无法在模块之间共享类,因此无法在这两个模块之间传递任何类。模块A中的TObject与模块B中的TObject不同。

您的主要选项是:

  1. 使用包而不是DLL。
  2. 使用interop接口,因为它们可以在两个模块之间安全传递。