Запуск и управление новым экземпляром приложения через COM - PullRequest
0 голосов
/ 02 февраля 2009

Я использую C # .NET для запуска и управления написанным на Delphi исполняемым файлом. Приложение Delphi имеет интерфейс COM.

Я импортировал исполняемый файл Delphi - назовем его DelphiApp.exe - в Visual Studio в качестве ресурса.

Работает следующий код C # - , если не запущен другой экземпляр DelphiApp.exe:

DelphiApp.DelphiAppClass da = new DelphiAppClass();
da.DoStuff(1, 3, 4); 

Если запущен экземпляр DelphiApp.exe, приведенный выше код «захватит» один из экземпляров, а это не то, что мне нужно. Когда я объявляю новый DelphiAppClass(), я всегда хочу, чтобы это был новый экземпляр приложения.

Я пробовал несколько обходных путей - например, запуск нового процесса DelphiApp, если он уже существует, - но я не могу найти правильный способ справиться с этим.

Есть предложения?

Ответы [ 3 ]

1 голос
/ 03 февраля 2009

При создании сервера автоматизации Delphi убедитесь, что вы используете ciSingleInstance для 4-го параметра в конструкторе объекта автомата. Например:

TAutoObjectFactory.Create(ComServer, TTestServer, Class_TestServer,
  ciSingleInstance, tmApartment);

Для этого потребуется, чтобы для каждого объекта был создан новый объект автоматизации.

1 голос
/ 03 февраля 2009

При создании сервера автоматизации Delphi убедитесь, что вы используете ciSingleInstance для 4-го параметра в конструкторе объекта автомата.

Я разместил это в комментарии OP - В Delphi я использую эту строку кода для определения поведения COM:

TTypedComObjectFactory.Create(ComServer, TDelphiApp, Class_DelphiApp, ciSingleInstance, tmSingle);

Насколько я знаю, это правильный способ настроить все на стороне COM. (Если нет, скажите, пожалуйста, что я делаю не так!)

Я использую Delphi 7, FWIW.

0 голосов
/ 03 февраля 2009

На прошлой неделе был задан вопрос, который звучит так, как будто это может быть противоположностью вашей проблемы (хочет повторно использовать приложение, но продолжает обновляться). Может быть, это поможет вам начать правильный путь?

Как повторно использовать сервер Delphi ole со вторым клиентом

...