|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Обработчик для функции OLE-объекта
Для работы с OPC-серверами в Delphi использовал импорт библиотеки типов
(для OPC DA - OPCDAAuto.dll и gbda_aut.dll) - весьма успешно. Сейчас почти полностью перешел на Lazarus, в котором нет поддержки импорта библиотеки типов. Для того, чтобы обратиться к OPCDAAuto.dll использую OLE-объект. Пример синхронного чтения данных: Код:
var opcServer, opcGroup, opcItem1: variant; isConnected: boolean = False; procedure TForm1.Button1Click(Sender: TObject); begin if not isConnected then begin try opcServer := CreateOleObject('OPC.Automation'); opcServer.Connect('Advantech.ADAM.1'); opcGroup := opcServer.OPCGroups.Add('TestGroup'); opcItem1 := opcGroup.OPCItems.AddItem('Simulation.Group1.Tag1', 1); isConnected := True; Label1.Caption := 'Connected'; except on E: Exception do ShowMessage(E.ClassName + ': ' + UTF8Encode(E.Message)); end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin if isConnected then begin try opcItem1.Read(1); Label2.Caption := VarToStr(opcItem1.Value); except on E: Exception do ShowMessage(E.ClassName + ': ' + UTF8Encode(E.Message)); end; end; end; Однако, не могу понять, как делать асинхронное чтение через созданный OLE-объект. Необходимо обрабатывать событие DataChange из DIOPCGroupEvent, но как это сделать в OLE? В общем, вопрос следующий: Как создать в Delphi обработчик события OLE-объекта, полученного с помощью CreateOleObject? |