Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / VB.NET Пользовательская Функция . / 25 сообщений из 37, страница 1 из 2
10.04.2013, 09:57
    #38219787
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
Всем доброго дня.
Как можно в функцию правильно использовать
переменных содержащих одномерный массив ?
Я никак не могу понять почему последний элемент в функции 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
10.04.2013, 10:07
    #38219804
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
Патаму шо, нумерация массивов начинается с 0.
...
Рейтинг: 0 / 0
10.04.2013, 10:07
    #38219805
VIT2708
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
Valeriu,

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

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

У тебя обьявление ф-ции не правильно надо Public m_var As String(16) может не точно так как синтаксис vb уже подзабыл
...
Рейтинг: 0 / 0
10.04.2013, 10:25
    #38219837
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
В функцию передавай массив, а от этого мрака с 16ью параметрами избавься.
...
Рейтинг: 0 / 0
10.04.2013, 10:38
    #38219860
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
У тебя обьявление ф-ции не правильно надо 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
10.04.2013, 10:42
    #38219868
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
Public m_var(1 7 ) As String
...
Рейтинг: 0 / 0
10.04.2013, 10:51
    #38219885
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
Public m_var(17) As String
Без изменений ...
...
Рейтинг: 0 / 0
10.04.2013, 11:37
    #38220001
Диклевич Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
такое в VB.NET невозможно.
либо через ParamArray , либо через перегрузку функции.
...
Рейтинг: 0 / 0
10.04.2013, 11:55
    #38220049
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
by> Диклевич Александр

Мне надобно еще передать в функцию данные .
Как это сделать никак не могу понять...
ParamArray позволяет только ByVal.
...
Рейтинг: 0 / 0
10.04.2013, 12:58
    #38220208
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
Спасибо. Вроде решается..
Код: 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
10.04.2013, 13:14
    #38220242
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
я вот думаю, что нужно придумать какой-то медицинский способ отучения людей от желания программировать.
...
Рейтинг: 0 / 0
10.04.2013, 13:21
    #38220253
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
winsky!, на эту тему есть такой баян
...
Рейтинг: 0 / 0
10.04.2013, 13:24
    #38220265
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
Вы лучше подсказали способ. Я только начал освоить .NET
А для высказываний такого рода здесь есть ПТ.
Спасибо за понимание.
...
Рейтинг: 0 / 0
10.04.2013, 13:25
    #38220267
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
buserwinsky!, на эту тему есть такой баян
у меня забанен сайт :(
...
Рейтинг: 0 / 0
10.04.2013, 18:06
    #38220880
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
ValeriuParamArray позволяет только ByVal.
Т.к. у тебя тип элемента Object, то ByVal можно смело использовать. ByRef тебе нужен только если функции необходимо не только получить значение, но и иметь возможность изменить значение переменной у вызывающей функции. Поэтому пользуйся ParamArray аргументом и код станет гораздо более простым в понимании.
...
Рейтинг: 0 / 0
10.04.2013, 19:52
    #38220976
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
ByRef тебе нужен только если функции необходимо не только получить значение, но и иметь возможность изменить значение переменной у вызывающей функции
Именно это и нужно было. Вроде разобрался.
Спасибо за отклик.
...
Рейтинг: 0 / 0
11.04.2013, 10:28
    #38221354
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
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
11.04.2013, 17:55
    #38222470
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
смотрел код и плакал
Вытрите слезы, я подправил

Код: 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
11.04.2013, 18:48
    #38222580
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
Valeriuя подправил
Функция с 17 аргументами это перебор. Уверен что её можно переписать и по пути избавиться от лишних локальных переменных. В прошлой версии каждый блок If/Else делал по сути одно и тоже. Подозреваю что в новой версии ничего не изменилось. Также ты говорил что ByRef нужен чтобы изменить значения "снаружи", но в коде этих изменений не видно. Если несложно приведи весь код функции и пример вызова.
...
Рейтинг: 0 / 0
11.04.2013, 23:01
    #38222767
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
bazileЕсли несложно приведи весь код функции и пример вызова.
Я боюсь
...
Рейтинг: 0 / 0
12.04.2013, 08:51
    #38222917
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
Если несложно приведи весь код функции и пример вызова.
Все это делается для работы с сокетом с 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
12.04.2013, 08:54
    #38222920
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB.NET Пользовательская Функция .
... и еще. Код клиентский большой и там присутствует
еще десяток функций, но эта самая важная.
И привести весь код я тоже боюсь, много пугливых здесь.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / VB.NET Пользовательская Функция . / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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