Подключение к COM-серверу ActiveX осуществляется через конструирование объекта WialonActiveX.WialonConnection, реализующего интерфейс IWialonConnection. Пример кода с комментариями (но без проверок на ошибки) на Visual Basic:
' Главный компонент системы, обеспечивающий подключение к Wialon Dim Wialon As Object ' Коллекция доступных объектов Dim Units As Object ' Отдельный объект Dim Unit As Object ' Строка ошибки Wialon Dim ErrStr As String ' Коллекция сообщений от объекта Dim Msgs As Object ' Счетчик Dim i As Long ' Количество объектов в коллекции Dim CountOfUnits As Long ' Создание объекта для подключения к Wialon (для 64-битных приложений — WialonActiveX64) Wialon = CreateObject("WialonActiveX.WialonConnection") ' Проверка подключения If Wialon Is Nothing Then ' Если ошибка, то вывод сообщения MsgBox("No Object") Return End If ' Установка настроек соединения через прокси-сервер Wialon.SetProxyMode "ProxyHost", 8080, "Login:Passw" ' Получение всех доступных объектов пользователю user с паролем passw, ' от сервера https://activex.gurtam.com (префикс необходим для подключения ' по защищенному соединению) на 443 порту, без прокси сервера Units = Wialon.Login("https://activex.gurtam.com", 443, "user", "passw") ' Проверка доступности объектов If Units Is Nothing Then ' Если объекты недоступны, то получаем ошибку элемента ActiveX, а также ошибку от Wialon MsgBox("Error = " + Err.Number.ToString() + ": " + Err.Source.ToString() + " (" + Err.Description.ToString() + ")") ' Получение ошибки от сервера Wialon ErrStr = Wialon.GetLastError() MsgBox("Wialon error: " + ErrStr) Return End If ' Получение количества доступных объектов CountOfUnits = Units.Count ' Вывод сообщения о количестве доступных объектов на экран MsgBox("Units = " + CountOfUnits.ToString()) ' Запуск цикла для перебора всех объектов For i = 1 To CountOfUnits ' Получение объекта из коллекции Unit = Units.Item(i) ' Проверка, получен ли объект If Unit Is Nothing Then ' Если объект не получен, скорее всего произошла ошибка — выход MsgBox("Not unit") Return End If ' Установка флага получения адресов по координатам. False — без адресов (быстрее). True — с адресами (медленнее). Unit.ResolveLocations (False) ' Получение сообщений от объекта за период (время в UNIX формате с 1 января 1970 г.) Msgs = Unit.GetMessages(1255112326, 1256312326) ' Проверка, получены ли сообщения If Msgs Is Nothing Then ' Вывод сообщения, что сообщения не получены MsgBox("No messages for unit: " + Unit.Name) Else ' Вывод количества сообщений, полученных от объекта MsgBox("Messages = " + Msgs.Count.ToString()) ' Уменьшение значения счетчика ссылок для предоставленной вызываемой оболочки среды CLR ' (выполнять, если необходимо, явное освобождение памяти после использования объекта) System.Runtime.InteropServices.Marshal.ReleaseComObject(Msgs) ' Релиз объекта с сообщениями Msgs = Nothing End If ' Уменьшение значения счетчика ссылок для предоставленной вызываемой оболочки среды CLR ' (выполнять, если необходимо, явное освобождение памяти после использования объекта) System.Runtime.InteropServices.Marshal.ReleaseComObject(Unit) ' Релиз объекта с объектом :) Unit = Nothing Next i ' Уменьшение значения счетчика ссылок для предоставленной вызываемой оболочки среды CLR ' (выполнять, если необходимо, явное освобождение памяти после использования объекта) System.Runtime.InteropServices.Marshal.ReleaseComObject(Units) ' Всё, конец программы, больше не будем работать с этими объектами, делаем релиз Units = Nothing Wialon = Nothing ' Конец MsgBox("End")
Более подробный пример содержится в прилагающемся к дистрибутиву файле Exсel.
|