Разобрался.
Объявил интерфейсы IOPCServer, IOPCGroups, IOPCGroup, OPCItems, OPCItem,
диспинтерфейсы DIOPCServer, DIOPCGroupEvent, создал класс для обработки событий
TOPCDataCallback = class(TInterfacedObject, IUnknown, IDispatch).
Создаю OLE-объект и подключаюсь таким образом:
- Код: Выделить всё
testServer := CreateOleObject('OPC.Automation') as DIOPCServer;
testServer.Connect('Advantech.ADAM.1', EmptyParam);
testGroup := testServer.OPCGroups.Add('TestGroup') as IOPCGroup;
opcItem1 := testGroup.OPCItems.AddItem('Simulation.Group1.Tag1', 1);
opcDataCallback := TOPCDataCallback.Create;
Container := testGroup as IConnectionPointContainer;
OleCheck(Container.FindConnectionPoint(IID_IOPCDataCallback,
ConnectionPoint));
OleCheck(ConnectionPoint.Advise(opcDataCallback as IUnknown, Cookie));
testGroup.Set_IsSubscribed(True);
testGroup.Set_IsActive(True);
testGroup.Set_UpdateRate(1000);
Отключение:
- Код: Выделить всё
ConnectionPoint.UnAdvise(Cookie);
События OLE-объекта обрабатываю в TOPCDataCallback.Invoke.

Кстати: одна из причин, почему в Lazarus не работают файлы импорта библиотек типов,
созданные в Delphi / Turbo Delphi, это практически пустой файл oleserver.pp.
Lazarus 0.9.29 FPC 2.5.1 Win32