powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
17 сообщений из 17, страница 1 из 1
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211291
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Имеется функция. В ней из процедуры передаются некие параметры.
В другую процедуру получаю некие данные.
Вот эти данные нужно присвоить входным переменным функции.
Как это можно делать ? И возможно ли это ?
Очень надеюсь на Вашу помощь.

Спасибо.

Код: plaintext
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.
Private Sub Command1_Click()
Dim a As String, b As String, c As String, d As String
a = "Janet "
b = "Erin "
c = "Carolyn "
d = "Kate "
cmdDo "test^test", a, b, c, d

'после выполнения, в переменные a,b,c,d должен получить 
'другие параметры (строки) из процедуры o_OnDataArrival
End Sub

Private Sub o_OnDataArrival(ByVal bytesTotal As Long)
On Error GoTo Error_Handler
Dim strChunk As String
On Error GoTo Error_Handler
o.GetData strChunk
rtb.Text = ""
    'if header hasn't arrived
    strHeader = strHeader & strChunk
    If InStr(strHeader, Chr( 0 ) & Chr( 0 ) & Chr( 0 ) & Chr( 0 ) & Chr( 0 )) Then
     rtb = strHeader
     strHeader = ""
     strChunk = ""
    End If

    ' Как переменным  v1 ,v2 ... v10 из функции
    ' присвоить то что получим здесь ?

Exit Sub
Error_Handler:
    strHeader = ""
    MsgBox ("Error: " & Err.Number & Err.Description)
End Sub


 Function cmdDo(Routine As String, Optional v1, Optional v2, Optional v3, _
                                   Optional v4, Optional v5, Optional v6, _
                                   Optional v7, Optional v8, Optional v9, Optional v10)
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 Str As Variant
Dim LenStr As Variant
Dim strSend As Variant
Dim strLenAll As Long
Dim strRes As Variant
    
par =  0 
strLenAll =  0 

If IsMissing(v1) = False Then
par = par +  1                            'Parameter
Str = Str & v1 & Chr( 13 ) & Chr( 10 )      'String
strLen1 = Len(v1)                       'Len string
strLenAll = strLenAll + Len(v1)         'All Len
Else
par = par
strLen1 =  0 
strLenAll = strLenAll
End If

If IsMissing(v2) = False Then
par = par +  1 
Str = Str & v2 & Chr( 13 ) & Chr( 10 )
strLen2 = Len(v2)
strLenAll = strLenAll + Len(v2)
Else
par = par
strLen2 =  0 
strLenAll = strLenAll
End If

If IsMissing(v3) = False Then
par = par +  1 
Str = Str & v3 & Chr( 13 ) & Chr( 10 )
strLen3 = Len(v3)
strLenAll = strLenAll + Len(v3)
Else
par = par
'Str = ""
strLen3 =  0 
strLenAll = strLenAll
End If

If IsMissing(v4) = False Then
par = par +  1 
Str = Str & v4 & Chr( 13 ) & Chr( 10 )
strLen4 = Len(v4)
strLenAll = strLenAll + Len(v4)
Else
par = par
strLen4 =  0 
strLenAll = strLenAll
End If

If IsMissing(v5) = False Then
par = par +  1 
Str = Str & v5 & Chr( 13 ) & Chr( 10 )
strLen5 = Len(v5)
strLenAll = strLenAll + Len(v5)
Else
par = par
strLen5 =  0 
strLenAll = strLenAll
End If

If IsMissing(v6) = False Then
par = par +  1 
Str = Str & v6 & Chr( 13 ) & Chr( 10 )
strLen6 = Len(v6)
strLenAll = strLenAll + Len(v6)
Else
par = par
strLen6 =  0 
strLenAll = strLenAll
End If

If IsMissing(v7) = False Then
par = par +  1 
Str = Str & v7 & Chr( 13 ) & Chr( 10 )
strLen7 = Len(v7)
strLenAll = strLenAll + Len(v7)
Else
par = par
strLen7 =  0 
strLenAll = strLenAll
End If

If IsMissing(v8) = False Then
par = par +  1 
Str = Str & v8 & Chr( 13 ) & Chr( 10 )
strLen8 = Len(v8)
strLenAll = strLenAll + Len(v8)
Else
par = par
'Str = ""
strLen8 =  0 
strLenAll = strLenAll
End If

If IsMissing(v9) = False Then
par = par +  1 
Str = Str & v9 & Chr( 13 ) & Chr( 10 )
strLen9 = Len(v9)
strLenAll = strLenAll + Len(v9)
Else
par = par
strLen9 =  0 
strLenAll = strLenAll
End If

If IsMissing(v10) = False Then
par = par +  1 
Str = Str & v10 & Chr( 13 ) & Chr( 10 )
strLen10 = Len(v10)
strLenAll = strLenAll + Len(v10)
Else
par = par
strLen10 =  0 
strLenAll = strLenAll
End If

strRes = "DO " & Routine & "~" & par & "~" & "Q" _
& "~" & strLenAll & "~" & strLen1 & "~" & strLen2 _
& "~" & strLen3 & "~" & strLen4 & "~" & strLen5 _
& "~" & strLen6 & "~" & strLen7 & "~" & strLen8 _
& "~" & strLen9 & "~" & strLen10 & vbCrLf & Str
o.SendData strRes

End Function
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211327
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriuдолжен получить
другие параметры (строки) из процедуры o_OnDataArrival

При этом o_OnDataArrival нигде в коде не вызывается. Пока не вызывается - никак. Из o_OnDataArrival функция cmdDo тоже не вызывается. Логика работы вашей конструкции непонятна, поэтому упростите каждую процедуру до двух строк и скажите, что куда нужно передать.
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211336
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valeriu,
сам-то понял, что хотел спросить?
1) чтобы вернуть из процедуры какие-либо значения - добавляешь ей параметов с методом передачи ByRef и передаешь в качестве параметров ссылки на переменные, которые хочется изменить в этой функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Command1_Click()
Dim a As String, b As String, c As String, d As String
' ...
  Call o_OnDataArrival( 100500 , a, b, c, d)
' ...
End Sub

Private Sub o_OnDataArrival(ByVal bytesTotal As Long, a$, b$, c$, d$)

' ...
 a = "новое значение для a из процедуры Command1_Click()"
 b = "новое значение для b из процедуры Command1_Click()"
 c = "новое значение для c из процедуры Command1_Click()"
 d = "новое значение для d из процедуры Command1_Click()"

' ...
End Sub
2) ... даже не знаю как сформулировать. Вызывай свою функцию с теми значениями параметров, какие "надо присвоить переменным из функции"
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211423
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно извините за каламбур.

1. Данные из команды Command1_Click() передаются в функцию cmdDo

2. Данные из функции передаются серверу через сокет

3. Полученные данные от сервера через сокет получаю в o_OnDataArrival
Здесь разбираю(буду разбирать по неким критериям) на 4 (четыре) переменных

4. Нужно чтобы в исходную команду Command1_Click() переменным (a,b,c,d) присвоить уже
данные, что получили от сервера, т.е. что разобрали в o_OnDataArrival

Примерно так хочется, что бы работала вся это кухня.
Это что-то на подобие ByRef, но только данные возвращаем из другой среды ...

Спасибо и извините если не правильно излагаю мысль.
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211473
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Command1_Click закончит свою работу раньше, чем выполнится o_OnDataArrival, так что никак
2) Вынесите все содержимое из Command1_Click в отдельную функцию с необязательными параметрами и вызывайте эту функцию как из Command1_Click (с константными параметрами), так и из o_OnDataArrival (с нужными параметрами)
3) Промежуточные значения запоминайте в переменных или массиве, определенных на уровне модуля. Кстати, покурите ParamArray на досуге
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211556
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro1) Command1_Click закончит свою работу раньше, чем выполнится o_OnDataArrival, так что никак
Или вы имеете ввиду при ПОВТОРНОМ вызове Command1_Click????
Тогда:
Код: plaintext
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.
Private a As String, b As String, c As String, d As String

Private Sub Form_Load()

a = "Janet "
b = "Erin "
c = "Carolyn "
d = "Kate "

End Sub

Private Sub Command1_Click()

cmdDo "test^test", a, b, c, d

'после выполнения, в переменные a,b,c,d должен получить 
'другие параметры (строки) из процедуры o_OnDataArrival
End Sub

Private Sub o_OnDataArrival(ByVal bytesTotal As Long)

...
a = "Что-то-другое "
b = "Что-то-другое "
c = "Что-то-другое "
d = "Что-то-другое "
...

End Sub
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211612
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или вы имеете ввиду при ПОВТОРНОМ вызове Command1_Click

Хотелось конечно при одном вызове ...
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211637
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuХотелось конечно при одном вызове ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Command1_Click()

cmdDo "test^test", a, b, c, d

Do Until некий_признак_того_что_o_OnDataArrival_отработал
  DoEvents
Loop

'в этом месте переменные a, b, c, d уже имеют новые значения

End Sub
Если я, конечно, правильно понял, что o_OnDataArrival срабатывает в ответ на СОБЫТИЕ, а не на что-то еще, иначе DoEvents не поможет
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211690
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я, конечно, правильно понял, что o_OnDataArrival срабатывает в ответ на СОБЫТИЕ, а не на что-то еще, иначе DoEvents не поможет

Я использую OSWINSCK.dll is a COM library for Visual Basic 6 ( http://www.ostrosoft.com/oswinsck.asp)

Events:
object.OnDataArrival(bytesTotal As Long)
new data arrived


Значит можно ?
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211725
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это написать в классе, кроме самой команды ?
Заработает или нет ?
Где-то встретил, что можно представить это как .dll
Честно говоря я с классами не очень работал ...
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211772
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как Вы считаете, это правильно ?

Код: plaintext
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.
'Option Explicit
Private strHeader As String
Private m_blnHeaderArrived As Boolean
Dim WithEvents o As OSWINSCK.Winsock
------
Private Sub Command1_Click()
Dim a As String, b As String, c As String, d As String
a = "Janet "
b = "Erin "
c = "Carolyn "
d = "Kate "
cmdDo "test^test", a, b, c, d
Do Until m_blnHeaderArrived
  DoEvents
Loop
a = "Что-то  "
b = "Что-то  "
c = "Что-то  "
d = "Что-то  "
MsgBox a & b & c & d
End Sub

Private Sub o_OnDataArrival(ByVal bytesTotal As Long)
On Error GoTo Error_Handler
Dim strChunk As String
m_blnHeaderArrived = False
o.GetData strChunk
rtb.Text = ""
    'if header hasn't arrived
    strHeader = strHeader & strChunk
    If InStr(strHeader, Chr( 0 ) & Chr( 0 ) & Chr( 0 ) & Chr( 0 ) & Chr( 0 )) Then
     rtb = strHeader
     strHeader = ""
     strChunk = ""
     m_blnHeaderArrived = True
    End If
   
Exit Sub
Error_Handler:
    strHeader = ""
    MsgBox ("Error: " & Err.Number & Err.Description)
End Sub
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211890
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuКак Вы считаете, это правильно ?
не знаю, вы ж меняете показания.

Вам нужно было программировать a b с и d в o_OnDataArrival или в cmdDo, а вы опять запихали в Command1_Click

ну или тогда введите промежуточные переменные.
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37211942
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения.
Вы правы, там и получить их в команде ...
А подход с Private m_blnHeaderArrived As Boolean правильный ?
Вроде реагирует на событие...
Сейчас попробую дальше двигаться.
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37212045
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну или тогда введите промежуточные переменные

Вроде работает.

'
Код: plaintext
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.
Option Explicit

Private strHeader As String
Private m_blnHeaderArrived As Boolean
Private m_var1 As String
Private m_var2 As String
Private m_var3 As String
Private m_var4 As String
Dim WithEvents o As OSWINSCK.Winsock
---------------------

Private Sub o_OnDataArrival(ByVal bytesTotal As Long)
On Error GoTo Error_Handler
Dim strChunk As String
m_blnHeaderArrived = False
o.GetData strChunk
rtb.Text = ""
    'if header hasn't arrived
    strHeader = strHeader & strChunk
    If InStr(strHeader, Chr( 0 ) & Chr( 0 ) & Chr( 0 ) & Chr( 0 ) & Chr( 0 )) Then
     rtb = strHeader
     strHeader = ""
     strChunk = ""
     m_blnHeaderArrived = True
    End If
   m_var1 = "Din o_OnDataArrival var1"
   m_var2 = "Din o_OnDataArrival var2"
   m_var3 = "Din o_OnDataArrival var3"
   m_var4 = "Din o_OnDataArrival var4"
Exit Sub
Error_Handler:
    strHeader = ""
    MsgBox ("Error: " & Err.Number & Err.Description)
End Sub


Function cmdDo(Routine As String, Optional v1, Optional v2, Optional v3, _
                                   Optional v4, Optional v5, Optional v6, _
                                   Optional v7, Optional v8, Optional v9, Optional v10)
................................

strRes = "DO " & Routine & "~" & par & "~" & "Q" _
& "~" & strLenAll & "~" & strLen1 & "~" & strLen2 _
& "~" & strLen3 & "~" & strLen4 & "~" & strLen5 _
& "~" & strLen6 & "~" & strLen7 & "~" & strLen8 _
& "~" & strLen9 & "~" & strLen10 & vbCrLf & Str
o.SendData strRes

Do Until m_blnHeaderArrived
  DoEvents
Loop
' Call and recive data on o_OnDataArrival
v1 = m_var1
v2 = m_var2
v3 = m_var3
v4 = m_var4
m_blnHeaderArrived = False
 m_var1 = ""
 m_var2 = ""
 m_var3 = ""
 m_var4 = ""

End Function
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37212067
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Shocker.Pro

Спасибо.

PS. Все таки написать это в класс что-то получится ?
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37212785
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValeriuPS. Все таки написать это в класс что-то получится ?
что вызывает сомнения?
...
Рейтинг: 0 / 0
Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
    #37213348
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, будем пробовать.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как можно получить обратно в функцию параметры отличные от тех, что передали в ней ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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