2013-04-22 2 views
0

У меня есть два процесса A и B. Процесс A представляет собой приложение форм VCL, содержащее форму TMainForm. Процесс B - это DLL, из которого я хочу удаленно управлять этой формой. Что-то вдоль линий (в процессе B):Доступ к форме VCL из DLL

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; 

Любые идеи, если и как это можно сделать?

+0

Это не главное. Я хочу удаленно управлять приложением A из другого приложения B и хотел бы предоставить «драйвер» для этого в виде библиотеки DLL. – jpfollenius

ответ

3

Если у вас действительно есть два отдельных процесса, вам нужна межпроцессная коммуникация (IPC). Например, вы можете сделать процесс A на COM-сервер вне процессора, который потребляется процессом B в виде автоматизации Office. Это один из многих вариантов, но все они требуют IPC.

Однако это звучит так же, как и исполняемый файл и DLL в том же процессе. В этом случае у вас есть два отдельных экземпляра VCL. Это означает, что вы не можете передать объект TForm или любой другой объект VCL между этими двумя модулями. Фактически, вы не можете передавать какой-либо класс между этими двумя модулями, поскольку вы не можете делиться классами между модулями. TObject в модуле А другой TObject от того, в модуле B.

Ваши основные варианты:

  1. Используйте пакет вместо DLL.
  2. Используйте интерфейсы для вашего взаимодействия, так как они могут быть безопасно переданы между двумя модулями.
+1

[Обзор IPC] (http://msdn.microsoft.com/library/windows/desktop/aa365574) – OnTheFly

Смежные вопросы