Delphi - несколько удаленных объектов ком - PullRequest
1 голос
/ 04 октября 2011

Мое приложение D5 находится на сервере, который используется несколькими пользователями удаленно, поэтому мне нужно использовать следующую функцию для создания COM-объекта для запуска другого приложения (LmPos), установленного на этом пользовательском ПК после запуска:

CreateRemoteComObject(const MachineName: WideString; const ClassID: TGUID): IUnknown;

вместо создания локального COM-объекта, как раньше:

EposServer := CreateOLEObject('POS.Server');

Однако MachineName и ClassID для подключения будут зависеть от того, какие пользователи запускают это приложение. Я вижу две проблемы с этим ...

Параметры должны быть постоянными, так как я могу присвоить им переменные? Или это невозможно, так как они постоянные.

Если мне требуется ввод данных пользователем, как мне преобразовать строку в TGUID? Кажется, он принимает только формат: = '{xxxx-xxxx-xxxx и т. Д.}'

Любая помощь будет принята с благодарностью. Я даже не уверен, возможно ли это в настоящее время, я пытаюсь настроить DCOM, но не удается.

1 Ответ

2 голосов
/ 05 октября 2011

AFAIK удаленное приложение DCOM на сервере всегда будет работать с текущим зарегистрированным пользователем, как вы заявили.

Избавьтесь от DCOM, если можете.Это устаревшая технология, и Windows Seven и 2008 Server не нравятся.Вам нужно будет установить протокол SMB 1 на ПК, и даже с этим у нас было много проблем.

Недавно я столкнулся с подобной проблемой с некоторыми пулами приложений Delphi 5.Я преобразовал вызовы DCOM существующих приложений Delphi 5 в службу HTTP, используя сервер режима ядра http.sys , работающий в службе Windows (запускается при запуске сервера, даже до того, как любой пользователь вошел в систему), и WinHTTP для клиента, который имитирует начальный класс DCOM (поэтому на клиенте изменился только один модуль).Так как HTTP не имеет состояния, для передачи событий с сервера на клиенты я добавил запрос на основе таймера в класс клиента, чтобы получить любое ожидающее событие с сервера (достаточно 500 мс и достаточно времени).Это решение сработало как прелесть с существующим кодом Delphi 5, а конечные клиенты точно так же, как результат с точки зрения скорости и стабильности.

...