С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 30
1

Подключение модуля ActiveX: перевести код с VB .NET

21.11.2012, 16:22. Показов 3113. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, сразу оговорюсь, что навыки программирования не высокие, но стоит задача подключить модуль Active X в C#. Есть пример на VB, надо переделать в C#, на данный момент было кое-что сделано, но встречаются ошибки. Помогите плиз разобраться.
Пример на VB:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
        ' Главный компонент системы, обеспечивающий подключение к 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,
        ' от сервера [url]https://activex.gurtam.com[/url] (префикс необходим для подключения
        ' по защищенному соединению) на 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")
Код на C#:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
   // Главный компонент системы, обеспечивающий подключение к Wialon
        SystemWialon.IWialonConnection WialonConn;
        //Коллекция доступных объектов
        SystemWialon.IWialonCollection WUnits;
        // Отдельный объект
        SystemWialon.IWialonUnit WUnit;
        // Строка ошибки Wialon
       string WErrStr;
        // Коллекция сообщений от объекта
        SystemWialon.IWialonCollection WMsgs;
        // Количество объектов в коллекции
        long WCountOfUnits;
        int f = 0;//значение false
 
       
        // Установка настроек соединения через прокси-сервер
        WialonConn.SetProxyMode("ProxyHost", 8080, "Login:Passw");//просит присвоить значение локальному объекту, непонятно зачем и как его присвоить?
        // Получение всех доступных объектов пользователю user с паролем passw,
        // от сервера [url]https://activex.gurtam.com[/url] (префикс необходим для подключения
        // по защищенному соединению) на 443 порту, без прокси сервера
        WUnits = WialonConn.Login("https://activex.gurtam.com", 443, "user", "passw");
        // Проверка доступности объектов
        if (WUnits == null)
        {
         //  Если объекты недоступны, то получаем ошибку элемента ActiveX, а также ошибку от Wialon
 
         //  Console.WriteLine("Error = " +  Err.Number.ToString() + ": " + Err.Source.ToString() + " (" + Err.Description.ToString() + ")");
 
         // Получение ошибки от сервера Wialon
         //  WErrStr =  WialonConn.GetLastError();
          WErrStr = WialonConn.GetLastError();
            Console.WriteLine("Wialon error:" + WErrStr);
        }
        else
            return;
         //' Получение количества доступных объектов
          WCountOfUnits = WUnits.Count;
        //' Вывод сообщения о количестве доступных объектов на экран
        Console.WriteLine("Units = " + WCountOfUnits.ToString());
        //' Запуск цикла для перебора всех объектов
        for (int i = 1; i < WUnits.Count; i++)
        {
            // Получение объекта из коллекции
            WUnit = WUnits[i];
 
            //    ' Проверка, получен ли объект
            if (WUnit == null)
                //        ' Если объект не получен, скорее всего произошла ошибка — выход
                Console.WriteLine("Not unit"); return;
 
 
            //    ' Установка флага получения адресов по координатам. False — без адресов (быстрее). True — с адресами (медленнее).
       
            
            WUnit.ResolveLocations(f);// Не понятно как ставить флаг, который определяет есть значение у f или его нету?
          
 
  if (f==0)
                // Получение сообщений от объекта за период (время в UNIX формате с 1 января 1970 г.)
                WMsgs = WUnit.GetMessages(1255112326, 1256312326);
            //     Проверка, получены ли сообщения
            if (WMsgs == null)
            {
                //        ' Вывод сообщения, что сообщения не получены
                Console.WriteLine("No messages for unit: " + WUnit.Name);
            }
            else
            {
                //        ' Вывод количества сообщений, полученных от объекта
                Console.WriteLine("Messages = " + WMsgs.Count.ToString());
                //        ' Уменьшение значения счетчика ссылок для предоставленной вызываемой оболочки среды CLR
                //        ' (выполнять, если необходимо, явное освобождение памяти после использования объекта)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(WMsgs);
                //        ' Релиз объекта с сообщениями
                WMsgs = null;
            }
            //    ' Уменьшение значения счетчика ссылок для предоставленной вызываемой оболочки среды CLR
            //    ' (выполнять, если необходимо, явное освобождение памяти после использования объекта)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(WUnit);
            //    ' Релиз объекта с объектом :)
            WUnit = null;
       
        }
        //' Уменьшение значения счетчика ссылок для предоставленной вызываемой оболочки среды CLR
        //' (выполнять, если необходимо, явное освобождение памяти после использования объекта)
       System.Runtime.InteropServices.Marshal.ReleaseComObject(WUnits);
        //' Всё, конец программы, больше не будем работать с этими объектами, делаем релиз
       WUnits = null;
       WialonConn = null;
        //' Конец
       Console.WriteLine("End");
      }
Буду очень признателен за помощь

Добавлено через 4 часа 1 минуту
С первой ошибкой разобрался, необходимо прописать следующее
C#
1
2
 Type xLApp = Type.GetTypeFromProgID("WialonActiveXLib.WialonConnections");
       WialonConn = (WialonActiveXLib.WialonConnection)Activator.CreateInstance(xLApp);
0
IT_Exp
Эксперт
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
Блог
21.11.2012, 16:22
Ответы с готовыми решениями:

Работа с Excel средствами VB.net. Как перевести код из VBA в VB.net?
Коллеги, добрый день! Нужна помощь! В свое время был написан макрос для Excel, но прошло и...

Перевести код из VB.net в С#
доброе время суток гуру....а сейчас вопрос,сушествует ли программа для перевода из VB.net в С# или...

Перевести код с VB.net на C#
Sub Button1_Click(sender As Object, e As EventArgs) DataGrid1.DataSourse =...

Перевести код с VB .NET
Public Class Valiakincalc2 Public i1, i2, i3, i4, i5, i6, iznak As Double, d As Integer,...

2
0 / 0 / 1
Регистрация: 03.08.2016
Сообщений: 6
07.12.2016, 14:04 2
Здравствуйте. Вы в итоге подключили к C# wialon? Можете скинуть код и описать алгоритм действий? Только начал возиться, пока ничего не выходит
0
0 / 0 / 1
Регистрация: 03.08.2016
Сообщений: 6
09.12.2016, 17:18 3
Чтобы подключиться к виалону из c# надо создавать объекты классов. Если посмотрите внутри библиотеки, там есть классы, которые реализуют все эти интерфейсы. В противном случае вы не сможете ничего сделать. Нельзя создавать объекты интерфейсов(только при теститровании, для этого есть специальные библиотеки типа Ninject). Вы создали отчеты в итоге, или смогли вытянуть коллекции отчетов и ресурсов?
0
09.12.2016, 17:18
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
09.12.2016, 17:18
Помогаю со студенческими работами здесь

Перевести код с VB .NET
Добрый день! Помогите пожалуйста корректно на C# данный код конвертнуть: Public Class class2 ...

Перевести код с VB.Net
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Перевести код с VB .NET
Public Class Form1 Private Function f(t As Double, h0 As Double, size As Double) As Double ...

Перевести код из VB.net в C#
Имеется кусок кода Function ToByte(ByVal Str As String) As Byte() Dim Tmp(Str.Length - 1)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru