【问题标题】:Access VCL form from DLL从 DLL 访问 VCL 表单
【发布时间】:2013-04-15 05:54:14
【问题描述】:

我有两个进程 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;

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

【问题讨论】:

  • 这不是重点。我想从另一个应用程序 B 远程控制应用程序 A,并希望以 DLL 的形式为此提供“驱动程序”。

标签: delphi dll delphi-xe2 vcl


【解决方案1】:

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

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

您的主要选择是:

  1. 使用包而不是 DLL。
  2. 为您的互操作使用接口,因为这些接口可以在两个模块之间安全地传递。

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多