0

我有两个进程 A 和 B。进程 A 是一个包含表单的 VCL 表单应用程序TMainForm。进程 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;

如果以及如何做到这一点有什么想法吗?

4

1 回答 1

3

如果你真的有两个独立的进程,那么你需要进程间通信(IPC)。例如,您可以将进程 A 变成一个进程外 COM 服务器,由进程 B 以 Office 自动化的方式使用。这是许多选项之一,但它们都需要 IPC。

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

您的主要选择是:

  1. 使用包而不是 DLL。
  2. 为您的互操作使用接口,因为这些可以在两个模块之间安全地传递。
于 2013-04-22T10:53:30.590 回答