powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / VB.NET Пользовательская Функция .
25 сообщений из 37, страница 1 из 2
VB.NET Пользовательская Функция .
    #38219787
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня.
Как можно в функцию правильно использовать
переменных содержащих одномерный массив ?
Я никак не могу понять почему последний элемент в функции m_var(16)
показывает ошибку а остальные нет ?
Error 1 Reference to a non-shared member requires an object reference.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Public m_var(16) As String
------
Public Function DoRoutine(ByVal Routine As String, Optional ByRef v1 As Object = m_var(1), Optional ByRef v2 As Object = m_var(2), Optional ByRef v3 As Object = m_var(3), _
                                      Optional ByRef v4 As Object = m_var(4), Optional ByRef v5 As Object = m_var(5), Optional ByRef v6 As Object = m_var(6), _
                                      Optional ByRef v7 As Object = m_var(7), Optional ByRef v8 As Object = m_var(8), Optional ByRef v9 As Object = m_var(9), _
                                      Optional ByRef v10 As Object = m_var(10), Optional ByRef v11 As Object = m_var(11), Optional ByRef v12 As Object = m_var(12), _
                                      Optional ByRef v13 As Object = m_var(13), Optional ByRef v14 As Object = m_var(14), Optional ByRef v15 As Object = m_var(15), _
                                      Optional ByRef v16 As Object = m_var(16)) As Object


Спасибо.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38219804
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Патаму шо, нумерация массивов начинается с 0.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38219805
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,

потому что отсчет начинается не с 1 а с 0

m_var(0)
....
m_var(15)
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38219819
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь что сразу не написал.
Я это тоже пробовал. Такая же ошибка ...
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38219822
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuИзвиняюсь что сразу не написал.
Я это тоже пробовал. Такая же ошибка ...Что-ты пробовал, продемонстрируй
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38219832
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuИзвиняюсь что сразу не написал.
Я это тоже пробовал. Такая же ошибка ...

У тебя обьявление ф-ции не правильно надо Public m_var As String(16) может не точно так как синтаксис vb уже подзабыл
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38219837
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В функцию передавай массив, а от этого мрака с 16ью параметрами избавься.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38219860
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя обьявление ф-ции не правильно надо Public m_var As String(16) может не точно так как синтаксис vb уже подзабыл

Подправил так:
Код: vbnet
1.
Public Shared m_var(16) As String


Новое сообщение: Error 1 Constant expression is required.
А это код переделанный с VB6:
Код: vbnet
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.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
Public Function DoRoutine(ByVal Routine As String, Optional ByRef v1 As Object = m_var(1), Optional ByRef v2 As Object = m_var(2), Optional ByRef v3 As Object = m_var(3), _
                                      Optional ByRef v4 As Object = m_var(4), Optional ByRef v5 As Object = m_var(5), Optional ByRef v6 As Object = m_var(6), _
                                      Optional ByRef v7 As Object = m_var(7), Optional ByRef v8 As Object = m_var(8), Optional ByRef v9 As Object = m_var(9), _
                                      Optional ByRef v10 As Object = m_var(10), Optional ByRef v11 As Object = m_var(11), Optional ByRef v12 As Object = m_var(12), _
                                      Optional ByRef v13 As Object = m_var(13), Optional ByRef v14 As Object = m_var(14), Optional ByRef v15 As Object = m_var(15), _
                                      Optional ByRef v16 As Object = m_var(16)) As Object
        Dim Par As Integer
        Dim strLen1 As Long, strLen2 As Long, strLen3 As Long, strLen4 As Long, strLen5 As Long
        Dim strLen6 As Long, strLen7 As Long, strLen8 As Long, strLen9 As Long, strLen10 As Long
        Dim strLen11 As Long, strLen12 As Long, strLen13 As Long, strLen14 As Long, strLen15 As Long, strLen16 As Long
        Dim str As Object = ""
        Dim strLenAll As Long
        Dim strRes As Object

        On Error Resume Next
        Par = 0
        strLenAll = 0

        If Len(v1) > 1 Then
            Par = Par + 1                           'Parameter
            str = str & v1 & Chr(0)                 'String
            strLen1 = Len(v1)                       'Len string
            strLenAll = strLenAll + Len(v1)         'All Len
        Else
            Par = Par
            strLen1 = 0
            strLenAll = strLenAll
        End If

        If Len(v2) > 1 Then
            Par = Par + 1
            str = str & v2 & Chr(0)
            strLen2 = Len(v2)
            strLenAll = strLenAll + Len(v2)
        Else
            Par = Par
            strLen2 = 0
            strLenAll = strLenAll
        End If

        If Len(v3) > 1 Then
            Par = Par + 1
            str = str & v3 & Chr(0)
            strLen3 = Len(v3)
            strLenAll = strLenAll + Len(v3)
        Else
            Par = Par
            strLen3 = 0
            strLenAll = strLenAll
        End If

        If Len(v4) > 1 Then
            Par = Par + 1
            str = str & v4 & Chr(0)
            strLen4 = Len(v4)
            strLenAll = strLenAll + Len(v4)
        Else
            Par = Par
            strLen4 = 0
            strLenAll = strLenAll
        End If

        If Len(v5) > 1 Then
            Par = Par + 1
            str = str & v5 & Chr(0)
            strLen5 = Len(v5)
            strLenAll = strLenAll + Len(v5)
        Else
            Par = Par
            strLen5 = 0
            strLenAll = strLenAll
        End If

        If Len(v6) > 1 Then
            Par = Par + 1
            str = str & v6 & Chr(0)
            strLen6 = Len(v6)
            strLenAll = strLenAll + Len(v6)
        Else
            Par = Par
            strLen6 = 0
            strLenAll = strLenAll
        End If

        If Len(v7) > 1 Then
            Par = Par + 1
            str = str & v7 & Chr(0)
            strLen7 = Len(v7)
            strLenAll = strLenAll + Len(v7)
        Else
            Par = Par
            strLen7 = 0
            strLenAll = strLenAll
        End If

        If Len(v8) > 1 Then
            Par = Par + 1
            str = str & v8 & Chr(0)
            strLen8 = Len(v8)
            strLenAll = strLenAll + Len(v8)
        Else
            Par = Par
            strLen8 = 0
            strLenAll = strLenAll
        End If

        If Len(v9) > 1 Then
            Par = Par + 1
            str = str & v9 & Chr(0)
            strLen9 = Len(v9)
            strLenAll = strLenAll + Len(v9)
        Else
            Par = Par
            strLen9 = 0
            strLenAll = strLenAll
        End If

        If Len(v10) > 1 Then
            Par = Par + 1
            str = str & v10 & Chr(0)
            strLen10 = Len(v10)
            strLenAll = strLenAll + Len(v10)
        Else
            Par = Par
            strLen10 = 0
            strLenAll = strLenAll
        End If

        If Len(v11) > 1 Then
            Par = Par + 1
            str = str & v11 & Chr(0)
            strLen11 = Len(v11)
            strLenAll = strLenAll + Len(v11)
        Else
            Par = Par
            strLen11 = 0
            strLenAll = strLenAll
        End If

        If Len(v12) > 1 Then
            Par = Par + 1
            str = str & v12 & Chr(0)
            strLen12 = Len(v12)
            strLenAll = strLenAll + Len(v12)
        Else
            Par = Par
            strLen12 = 0
            strLenAll = strLenAll
        End If

        If Len(v13) > 1 Then
            Par = Par + 1
            str = str & v13 & Chr(0)
            strLen12 = Len(v13)
            strLenAll = strLenAll + Len(v13)
        Else
            Par = Par
            strLen13 = 0
            strLenAll = strLenAll
        End If

        If Len(v14) > 1 Then
            Par = Par + 1
            str = str & v14 & Chr(0)
            strLen14 = Len(v14)
            strLenAll = strLenAll + Len(v14)
        Else
            Par = Par
            strLen14 = 0
            strLenAll = strLenAll
        End If

        If Len(v15) > 1 Then
            Par = Par + 1
            str = str & v15 & Chr(0)
            strLen15 = Len(v15)
            strLenAll = strLenAll + Len(v15)
        Else
            Par = Par
            strLen15 = 0
            strLenAll = strLenAll
        End If

        If Len(v16) > 1 Then
            Par = Par + 1
            str = str & v16 & Chr(0)
            strLen16 = Len(v16)
            strLenAll = strLenAll + Len(v16)
        Else
            Par = Par
            strLen16 = 0
            strLenAll = strLenAll
        End If

        'If RetResult = True Then Ret = "Q"
        'If RetResult = False Then Ret = "R"
        strRes = "DO " & Routine & "~" & Par & "~" & "R" _
        & "~" & strLenAll & "~" & strLen1 & "~" & strLen2 _
        & "~" & strLen3 & "~" & strLen4 & "~" & strLen5 _
        & "~" & strLen6 & "~" & strLen7 & "~" & strLen8 _
        & "~" & strLen9 & "~" & strLen10 & "~" & strLen11 _
        & "~" & strLen12 & "~" & strLen13 & "~" & strLen14 _
        & "~" & strLen15 & "~" & strLen16 & Chr(0) & str
        GTMCmd.SendData(strRes)

        'Astept cand vin toate datele si insemn evenimentul
        Do Until m_blnHeaderArrived
            Application.DoEvents()
        Loop
        'Datele primite din GTMCmd_OnDataArrival egalez cu variabilele v1..v12
        'DoRoutine = m_var(0) ' Pseudo parametru ("") - nu-l folosim
        'v1 = m_var(1)
        'v2 = m_var(2)
        'v3 = m_var(3)
        'v4 = m_var(4)
        'v5 = m_var(5)
        'v6 = m_var(6)
        'v7 = m_var(7)
        'v8 = m_var(8)
        'v9 = m_var(9)
        'v10 = m_var(10)
        'v11 = m_var(11)
        'v12 = m_var(12)
        'v13 = m_var(13)
        'v14 = m_var(14)
        'v15 = m_var(15)
        'v16 = m_var(16)
        Return m_var(0)
        Call Reset()

    End Function

...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38219868
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Public m_var(1 7 ) As String
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38219885
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Public m_var(17) As String
Без изменений ...
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38220001
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такое в VB.NET невозможно.
либо через ParamArray , либо через перегрузку функции.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38220049
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
by> Диклевич Александр

Мне надобно еще передать в функцию данные .
Как это сделать никак не могу понять...
ParamArray позволяет только ByVal.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38220208
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Вроде решается..
Код: vbnet
1.
Public Function DoRoutine(ByVal Routine As String, Optional ByRef v1 As Object = Nothing, ... Optional ByRef v16 As Object = Nothing) As Object
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38220242
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вот думаю, что нужно придумать какой-то медицинский способ отучения людей от желания программировать.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38220253
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
winsky!, на эту тему есть такой баян
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38220265
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы лучше подсказали способ. Я только начал освоить .NET
А для высказываний такого рода здесь есть ПТ.
Спасибо за понимание.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38220267
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserwinsky!, на эту тему есть такой баян
у меня забанен сайт :(
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38220880
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuParamArray позволяет только ByVal.
Т.к. у тебя тип элемента Object, то ByVal можно смело использовать. ByRef тебе нужен только если функции необходимо не только получить значение, но и иметь возможность изменить значение переменной у вызывающей функции. Поэтому пользуйся ParamArray аргументом и код станет гораздо более простым в понимании.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38220976
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByRef тебе нужен только если функции необходимо не только получить значение, но и иметь возможность изменить значение переменной у вызывающей функции
Именно это и нужно было. Вроде разобрался.
Спасибо за отклик.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38221354
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuУ тебя обьявление ф-ции не правильно надо Public m_var As String(16) может не точно так как синтаксис vb уже подзабыл

Подправил так:
Код: vbnet
1.
Public Shared m_var(16) As String



Новое сообщение: Error 1 Constant expression is required.
А это код переделанный с VB6:
Код: vbnet
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.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
Public Function DoRoutine(ByVal Routine As String, Optional ByRef v1 As Object = m_var(1), Optional ByRef v2 As Object = m_var(2), Optional ByRef v3 As Object = m_var(3), _
                                      Optional ByRef v4 As Object = m_var(4), Optional ByRef v5 As Object = m_var(5), Optional ByRef v6 As Object = m_var(6), _
                                      Optional ByRef v7 As Object = m_var(7), Optional ByRef v8 As Object = m_var(8), Optional ByRef v9 As Object = m_var(9), _
                                      Optional ByRef v10 As Object = m_var(10), Optional ByRef v11 As Object = m_var(11), Optional ByRef v12 As Object = m_var(12), _
                                      Optional ByRef v13 As Object = m_var(13), Optional ByRef v14 As Object = m_var(14), Optional ByRef v15 As Object = m_var(15), _
                                      Optional ByRef v16 As Object = m_var(16)) As Object
        Dim Par As Integer
        Dim strLen1 As Long, strLen2 As Long, strLen3 As Long, strLen4 As Long, strLen5 As Long
        Dim strLen6 As Long, strLen7 As Long, strLen8 As Long, strLen9 As Long, strLen10 As Long
        Dim strLen11 As Long, strLen12 As Long, strLen13 As Long, strLen14 As Long, strLen15 As Long, strLen16 As Long
        Dim str As Object = ""
        Dim strLenAll As Long
        Dim strRes As Object

        On Error Resume Next
        Par = 0
        strLenAll = 0

        If Len(v1) > 1 Then
            Par = Par + 1                           'Parameter
            str = str & v1 & Chr(0)                 'String
            strLen1 = Len(v1)                       'Len string
            strLenAll = strLenAll + Len(v1)         'All Len
        Else
            Par = Par
            strLen1 = 0
            strLenAll = strLenAll
        End If

        If Len(v2) > 1 Then
            Par = Par + 1
            str = str & v2 & Chr(0)
            strLen2 = Len(v2)
            strLenAll = strLenAll + Len(v2)
        Else
            Par = Par
            strLen2 = 0
            strLenAll = strLenAll
        End If

        If Len(v3) > 1 Then
            Par = Par + 1
            str = str & v3 & Chr(0)
            strLen3 = Len(v3)
            strLenAll = strLenAll + Len(v3)
        Else
            Par = Par
            strLen3 = 0
            strLenAll = strLenAll
        End If

        If Len(v4) > 1 Then
            Par = Par + 1
            str = str & v4 & Chr(0)
            strLen4 = Len(v4)
            strLenAll = strLenAll + Len(v4)
        Else
            Par = Par
            strLen4 = 0
            strLenAll = strLenAll
        End If

        If Len(v5) > 1 Then
            Par = Par + 1
            str = str & v5 & Chr(0)
            strLen5 = Len(v5)
            strLenAll = strLenAll + Len(v5)
        Else
            Par = Par
            strLen5 = 0
            strLenAll = strLenAll
        End If

        If Len(v6) > 1 Then
            Par = Par + 1
            str = str & v6 & Chr(0)
            strLen6 = Len(v6)
            strLenAll = strLenAll + Len(v6)
        Else
            Par = Par
            strLen6 = 0
            strLenAll = strLenAll
        End If

        If Len(v7) > 1 Then
            Par = Par + 1
            str = str & v7 & Chr(0)
            strLen7 = Len(v7)
            strLenAll = strLenAll + Len(v7)
        Else
            Par = Par
            strLen7 = 0
            strLenAll = strLenAll
        End If

        If Len(v8) > 1 Then
            Par = Par + 1
            str = str & v8 & Chr(0)
            strLen8 = Len(v8)
            strLenAll = strLenAll + Len(v8)
        Else
            Par = Par
            strLen8 = 0
            strLenAll = strLenAll
        End If

        If Len(v9) > 1 Then
            Par = Par + 1
            str = str & v9 & Chr(0)
            strLen9 = Len(v9)
            strLenAll = strLenAll + Len(v9)
        Else
            Par = Par
            strLen9 = 0
            strLenAll = strLenAll
        End If

        If Len(v10) > 1 Then
            Par = Par + 1
            str = str & v10 & Chr(0)
            strLen10 = Len(v10)
            strLenAll = strLenAll + Len(v10)
        Else
            Par = Par
            strLen10 = 0
            strLenAll = strLenAll
        End If

        If Len(v11) > 1 Then
            Par = Par + 1
            str = str & v11 & Chr(0)
            strLen11 = Len(v11)
            strLenAll = strLenAll + Len(v11)
        Else
            Par = Par
            strLen11 = 0
            strLenAll = strLenAll
        End If

        If Len(v12) > 1 Then
            Par = Par + 1
            str = str & v12 & Chr(0)
            strLen12 = Len(v12)
            strLenAll = strLenAll + Len(v12)
        Else
            Par = Par
            strLen12 = 0
            strLenAll = strLenAll
        End If

        If Len(v13) > 1 Then
            Par = Par + 1
            str = str & v13 & Chr(0)
            strLen12 = Len(v13)
            strLenAll = strLenAll + Len(v13)
        Else
            Par = Par
            strLen13 = 0
            strLenAll = strLenAll
        End If

        If Len(v14) > 1 Then
            Par = Par + 1
            str = str & v14 & Chr(0)
            strLen14 = Len(v14)
            strLenAll = strLenAll + Len(v14)
        Else
            Par = Par
            strLen14 = 0
            strLenAll = strLenAll
        End If

        If Len(v15) > 1 Then
            Par = Par + 1
            str = str & v15 & Chr(0)
            strLen15 = Len(v15)
            strLenAll = strLenAll + Len(v15)
        Else
            Par = Par
            strLen15 = 0
            strLenAll = strLenAll
        End If

        If Len(v16) > 1 Then
            Par = Par + 1
            str = str & v16 & Chr(0)
            strLen16 = Len(v16)
            strLenAll = strLenAll + Len(v16)
        Else
            Par = Par
            strLen16 = 0
            strLenAll = strLenAll
        End If

        'If RetResult = True Then Ret = "Q"
        'If RetResult = False Then Ret = "R"
        strRes = "DO " & Routine & "~" & Par & "~" & "R" _
        & "~" & strLenAll & "~" & strLen1 & "~" & strLen2 _
        & "~" & strLen3 & "~" & strLen4 & "~" & strLen5 _
        & "~" & strLen6 & "~" & strLen7 & "~" & strLen8 _
        & "~" & strLen9 & "~" & strLen10 & "~" & strLen11 _
        & "~" & strLen12 & "~" & strLen13 & "~" & strLen14 _
        & "~" & strLen15 & "~" & strLen16 & Chr(0) & str
        GTMCmd.SendData(strRes)

        'Astept cand vin toate datele si insemn evenimentul
        Do Until m_blnHeaderArrived
            Application.DoEvents()
        Loop
        'Datele primite din GTMCmd_OnDataArrival egalez cu variabilele v1..v12
        'DoRoutine = m_var(0) ' Pseudo parametru ("") - nu-l folosim
        'v1 = m_var(1)
        'v2 = m_var(2)
        'v3 = m_var(3)
        'v4 = m_var(4)
        'v5 = m_var(5)
        'v6 = m_var(6)
        'v7 = m_var(7)
        'v8 = m_var(8)
        'v9 = m_var(9)
        'v10 = m_var(10)
        'v11 = m_var(11)
        'v12 = m_var(12)
        'v13 = m_var(13)
        'v14 = m_var(14)
        'v15 = m_var(15)
        'v16 = m_var(16)
        Return m_var(0)
        Call Reset()

    End Function




смотрел код и плакал
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38222470
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотрел код и плакал
Вытрите слезы, я подправил

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 Public Function DoRoutine(ByVal Routine As String, Optional ByRef v1 As Object = Nothing, Optional ByRef v2 As Object = Nothing, Optional ByRef v3 As Object = Nothing, _
                                      Optional ByRef v4 As Object = Nothing, Optional ByRef v5 As Object = Nothing, Optional ByRef v6 As Object = Nothing, _
                                      Optional ByRef v7 As Object = Nothing, Optional ByRef v8 As Object = Nothing, Optional ByRef v9 As Object = Nothing, _
                                      Optional ByRef v10 As Object = Nothing, Optional ByRef v11 As Object = Nothing, Optional ByRef v12 As Object = Nothing, _
                                      Optional ByRef v13 As Object = Nothing, Optional ByRef v14 As Object = Nothing, Optional ByRef v15 As Object = Nothing, _
                                      Optional ByRef v16 As Object = Nothing) As Object
        Dim Par As Integer
        Dim strLen1 As Long, strLen2 As Long, strLen3 As Long, strLen4 As Long, strLen5 As Long
        Dim strLen6 As Long, strLen7 As Long, strLen8 As Long, strLen9 As Long, strLen10 As Long
        Dim strLen11 As Long, strLen12 As Long, strLen13 As Long, strLen14 As Long, strLen15 As Long, strLen16 As Long
        Dim str As Object = ""
        Dim strLenAll As Long
        Dim strRes As Object

        On Error Resume Next
        Par = 0
        strLenAll = 0

        If Not IsNothing(v1) Then
        ......

...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38222580
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriuя подправил
Функция с 17 аргументами это перебор. Уверен что её можно переписать и по пути избавиться от лишних локальных переменных. В прошлой версии каждый блок If/Else делал по сути одно и тоже. Подозреваю что в новой версии ничего не изменилось. Также ты говорил что ByRef нужен чтобы изменить значения "снаружи", но в коде этих изменений не видно. Если несложно приведи весь код функции и пример вызова.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38222767
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
bazileЕсли несложно приведи весь код функции и пример вызова.
Я боюсь
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38222917
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если несложно приведи весь код функции и пример вызова.
Все это делается для работы с сокетом с NoSQL Database.
Бизнес логика серверного сокета написана на стороне NoSQL Database,
клиент может быть написан на любом языке(в нашем случае на VB)
Клиент может передать серверу 16 переменных в которых можно поместить
за один раз 16 мГб инфо.
В этих же переменных, со стороны сервера получаем обратно обработанную
информацию с со стороны сервера. Вот почему и нужно было такой подход.
Клиентский вызов:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim inp As String = "Test input Client"
        Dim a As String="Здесь тоже можно что-то, как и во всех 16 прм"
        Dim b As String = ""
        Dim c As String = ""
        Dim d As String = ""
        Dim i As Integer
        m.DoRoutine("INP^tst", inp, a, b, c, d)
        ' Уже обработанную инфу с стороны сервера
        MsgBox(a & b & c & d)
    End Sub


Клиентский сокет:
Код: vbnet
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.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
Imports System.Windows.Forms
Public Class GTMCmd
    '=============================
    'EVENTS
    '=============================
    Public Event DataArrival(ByVal bytesTotal As Long)
    Private m_blnHeaderArrived As Boolean
    Public Shared m_var(16) As Object
    Private m_strHeader As String
    Private WithEvents GTMCmd As OSWINSCK.Winsock
    Property Status() As String
        Get
            Status = GTMCmd.Status
        End Get

        Set(ByVal Value As String)
            GTMCmd.Status = Value
        End Set
    End Property
    Property RemoteHost() As String
        Get
            RemoteHost = GTMCmd.RemoteHost
        End Get

        Set(ByVal Value As String)
            GTMCmd.RemoteHost = Value
        End Set
    End Property

    Property RemotePort() As String
        Get
            RemotePort = GTMCmd.RemotePort
        End Get

        Set(ByVal Value As String)
            GTMCmd.RemotePort = Value
        End Set
    End Property

    Private Sub Close()
        'Classe terminate ??????
        GTMCmd = Nothing
    End Sub

    Public Sub New()
        GTMCmd = New OSWINSCK.Winsock
    End Sub

    Public Sub Refresh()
        Reset()
    End Sub
    Private Sub GTMCmd_OnDataArrival(ByVal bytesTotal As Integer) _
      Handles GTMCmd.OnDataArrival
        Dim m_strChunk As String = ""
        Dim cnt As Integer
        Dim varFull() As String

        On Error GoTo Error_Handler
        'Try
        m_blnHeaderArrived = False
        Call Reset()
        GTMCmd.GetData(m_strChunk)
        'if header hasn't arrived pentru functii ... tot aici
        m_strHeader = m_strHeader & m_strChunk
        '---------------------------------------------------------------
        'if header hasn't arrived. QUIT - "F"  No QUIT - "R"
        '---------------------------------------------------------------
        If InStr(m_strHeader, Chr(157)) Then
            'Selectam cati parameteri. Eroare - End
            'varFull(0) e rezervat pentru a intoarce prin "Q"
            'varFull(1) e rezervat pentru a intoarce Error
            varFull = Split(m_strHeader, Chr(156))
            If InStr(varFull(1), "<Error:>") Then
                MsgBox(varFull(1))
                Call Reset()
                m_strHeader = ""
                m_strChunk = ""
            End If

            'Inscriem datele primite in Array m_var
            For cnt = 0 To UBound(varFull) - 1
                m_var(cnt) = varFull(cnt)
            Next cnt
            m_strHeader = ""
            m_strChunk = ""
            m_blnHeaderArrived = True
        End If

        Exit Sub
Error_Handler:
        'Catch
        Reset()
        m_strHeader = ""
        m_strChunk = ""
        MsgBox("Error: " & Err.Number & "- " & Err.Description)
        'End Try
    End Sub

    Public Function DoRoutine(ByVal Routine As String, Optional ByRef v1 As Object = Nothing, Optional ByRef v2 As Object = Nothing, Optional ByRef v3 As Object = Nothing, _
                                      Optional ByRef v4 As Object = Nothing, Optional ByRef v5 As Object = Nothing, Optional ByRef v6 As Object = Nothing, _
                                      Optional ByRef v7 As Object = Nothing, Optional ByRef v8 As Object = Nothing, Optional ByRef v9 As Object = Nothing, _
                                      Optional ByRef v10 As Object = Nothing, Optional ByRef v11 As Object = Nothing, Optional ByRef v12 As Object = Nothing, _
                                      Optional ByRef v13 As Object = Nothing, Optional ByRef v14 As Object = Nothing, Optional ByRef v15 As Object = Nothing, _
                                      Optional ByRef v16 As Object = Nothing) As Object
        Dim Par As Integer
        Dim strLen1 As Long, strLen2 As Long, strLen3 As Long, strLen4 As Long, strLen5 As Long
        Dim strLen6 As Long, strLen7 As Long, strLen8 As Long, strLen9 As Long, strLen10 As Long
        Dim strLen11 As Long, strLen12 As Long, strLen13 As Long, strLen14 As Long, strLen15 As Long, strLen16 As Long
        Dim str As Object = ""
        Dim strLenAll As Long
        Dim strRes As Object

        On Error Resume Next
        Par = 0
        strLenAll = 0

        If Not IsNothing(v1) Then
            Par = Par + 1                           'Parameter
            str = str & v1 & Chr(0)                 'String
            strLen1 = Len(v1)                       'Len string
            strLenAll = strLenAll + Len(v1)         'All Len
        Else
            Par = Par
            strLen1 = 0
            strLenAll = strLenAll
        End If

       .......................................

        If Not IsNothing(v16) Then
            Par = Par + 1
            str = str & v16 & Chr(0)
            strLen16 = Len(v16)
            strLenAll = strLenAll + Len(v16)
        Else
            Par = Par
            strLen16 = 0
            strLenAll = strLenAll
        End If

        'If RetResult = True Then Ret = "Q"
        'If RetResult = False Then Ret = "R"
        strRes = "DO " & Routine & "~" & Par & "~" & "R" _
        & "~" & strLenAll & "~" & strLen1 & "~" & strLen2 _
        & "~" & strLen3 & "~" & strLen4 & "~" & strLen5 _
        & "~" & strLen6 & "~" & strLen7 & "~" & strLen8 _
        & "~" & strLen9 & "~" & strLen10 & "~" & strLen11 _
        & "~" & strLen12 & "~" & strLen13 & "~" & strLen14 _
        & "~" & strLen15 & "~" & strLen16 & Chr(0) & str & vbCrLf
        GTMCmd.SendData(strRes)

        'Astept cand vin toate datele si insemn evenimentul
        Do Until m_blnHeaderArrived
            Application.DoEvents()
        Loop
        'Datele primite din GTMCmd_OnDataArrival egalez cu variabilele v1..v12
        'DoRoutine = m_var(0) ' Pseudo parametru ("") - nu-l folosim
        v1 = m_var(1)
        v2 = m_var(2)
        v3 = m_var(3)
        v4 = m_var(4)
        v5 = m_var(5)
        v6 = m_var(6)
        v7 = m_var(7)
        v8 = m_var(8)
        v9 = m_var(9)
        v10 = m_var(10)
        v11 = m_var(11)
        v12 = m_var(12)
        v13 = m_var(13)
        v14 = m_var(14)
        v15 = m_var(15)
        v16 = m_var(16)
        Return m_var(0)
        Call Reset()

    End Function


Согласен что 16 переменных много, но ...
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38222920
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... и еще. Код клиентский большой и там присутствует
еще десяток функций, но эта самая важная.
И привести весь код я тоже боюсь, много пугливых здесь.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / VB.NET Пользовательская Функция .
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]