J
jashilko
Теперь у меня вторая проблема:
Имеется сервер автоматизации в виде exe, имеются несколько клиентов которые к нему подключаются и должны получать события. То есть один клиент по нажатию кнопки событие генерирует, и все! клиенты его получают.
Всё работает на локальной машине, как только я пытаюсь запустить клиента на локальной машине, он создаёт всё равно свой сервер, никак не связанный с тем, к которому подключены локальные клиенты.
У клиентов есть функция подключения GetActiveObject, если объект получили, то всё здорово, если нет - создаём. Если клиент удалён, используем функцию CreateRemoteComObject но она именно создаёт новый, она не подключается к уже существующему.
Почему так и в чём решение?
Подключение клиента:
инициализация сервера:
Имеется сервер автоматизации в виде exe, имеются несколько клиентов которые к нему подключаются и должны получать события. То есть один клиент по нажатию кнопки событие генерирует, и все! клиенты его получают.
Всё работает на локальной машине, как только я пытаюсь запустить клиента на локальной машине, он создаёт всё равно свой сервер, никак не связанный с тем, к которому подключены локальные клиенты.
У клиентов есть функция подключения GetActiveObject, если объект получили, то всё здорово, если нет - создаём. Если клиент удалён, используем функцию CreateRemoteComObject но она именно создаёт новый, она не подключается к уже существующему.
Почему так и в чём решение?
Подключение клиента:
Код:
GetActiveObject(CLASS_autom, nil, ActiveObj);
if ActiveObj <> nil then
AutoTest := ActiveObj as Iautom
else
AutoTest := Coautom.Create;
EventSink := TEvent.Create as IEventSink;
Container := AutoTest as IConnectionPointContainer;
OleCheck(Container.FindConnectionPoint(IEventSink, ConnectionPoint));
OleCheck(ConnectionPoint.Advise(EventSink, Cookie));
инициализация сервера:
Код:
inherited Initialize;
FConnectionPoints := TConnectionPoints.Create(Self);
if AutoFactory.EventTypeInfo <> nil then
FConnectionPoints.CreateConnectionPoint(AutoFactory.EventIID,
ckMulti, EventConnect);
RegisterActiveObject(Self as IUnknown, CLASS_autom,
ACTIVEOBJECT_WEAK, FObjRegHandle);