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

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

21.11.2012, 16:22. Показов 3096. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
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
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru