powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / VB.NET Пользовательская Функция .
37 сообщений из 37, показаны все 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
VB.NET Пользовательская Функция .
    #38223502
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu, оригинально...
Значит использовать
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
...
        Dim varFull() As String
...
'Inscriem datele primite in Array m_var
            For cnt = 0 To UBound(varFull) - 1
                m_var(cnt) = varFull(cnt)
            Next cnt
...


а потом:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
        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)
...


это нормально,
а использовать массив для передачи параметров - не получается...
Ну-ну.

К тому-же, судя по коду
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
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)

тут в аккурат массив параметров напрашивается.
И это, а где проверка на выход за пределы массива в присвоении значений с v1 по v16? У вас ну прямо-таки всегда будет от сервера приходить шестнадцать параметров?
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38223583
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это, а где проверка на выход за пределы массива в присвоении значений с v1 по v16? У вас ну прямо-таки всегда будет от сервера приходить шестнадцать параметров?
Не больше. Точно. Меньше пожалуйста, но не больше 16.
А насчет массива я подумаю.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38223586
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Выше если посмотрите я пробовал, но говорили что так не катит.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38223802
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu... и еще. Код клиентский большой и там присутствует
еще десяток функций, но эта самая важная.
И привести весь код я тоже боюсь, много пугливых здесь.

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

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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        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)



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

а что показывать ? ацкая копипаста

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

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        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)



Индусский Китайский код ....Да, есть такая буква.
Они (китайцы) ещё любят циклы в IF заворачивать - вот это жесть...
А тут - просто опыта у человека маловато...
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38224134
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвесь этот функционал умещается максимум в 10 строчек, а этот гавнокод на помойку
Даеш 9 строчек !!!
Если можно давай на ПТ перейдем. Я вижу у тебя там по больше опыта будет .
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38224136
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А спросить здесь больше не вижу смысла.
...
Рейтинг: 0 / 0
VB.NET Пользовательская Функция .
    #38224137
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,

Ну вот что-то типо такого (могу наговнокодить, поскольку давно именно с VB.NET не общаюсь :
Код: 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.
    Public Function DoRoutine(ByVal Routine As String, ByRef arParams() As String) As Object
        Dim Par As Integer
        Dim str As String = ""
        Dim iLenAll As Long
        Dim strRes As String
        Dim strLengths As String = ""
        Dim iLen As Integer

        On Error Resume Next
        Par = 0
        iLenAll = 0

        For Each spar As String In arParams
            iLen = 0
            If Not IsNothing(spar) Then
                Par = Par + 1
                str = str & spar & Chr(0)
                iLen = Len(spar)
            End If
            iLenAll = iLenAll + iLen
            strLengths = strLengths & "~" & iLen
        Next
        strRes = String.Format("DO {0}~{1}~R~{2}{3}~{4}~{5}{6}",
                               New Object() {Routine, Par, iLenAll, strLengths, Chr(0), str, vbCrLf})

        GTMCmd.SendData(strRes)

        'Astept cand vin toate datele si insemn evenimentul
        Do Until m_blnHeaderArrived
            Application.DoEvents()
        Loop
        For iLen = 1 To m_var.Length
            arParams(iLen) = m_var(iLen)
        Next
        Return m_var(0)
        Call Reset()

    End Function
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / VB.NET Пользовательская Функция .
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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