Чтение из сокета \ падение студии

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Чтение из сокета \ падение студии

Сообщение vvs_adm » 15.01.2006 (Вс) 9:20

Код: Выделить всё
Private Declare Function m_recv Lib "ws2_32.dll" Alias "recv" (ByVal s As Long, ByRef buf As Any, ByVal buflen As Long, ByVal flags As Long) As Long

...

Dim sBufer As String * 1024
Dim nLenData As Long
           
MDebug.mPrint "Начинаем чтение данных"
nLenData = m_recv(m_nSocket, sBufer, 1024, 0)
MDebug.mPrint "nLenData=" & CStr(nLenData)
Так как студия рушится, то Debug.Print информации не дает, пришлось зделать свою функцию mPrint записи в файл, так вот в файле появляется запись "Начинаем чтение данных", после чего "VB6.exe вызвало нехорошую ошибку и срочно закрывается". А какие могут быть причины?

P.S.: для уточнения поставил останов на строку nLenData=m_recv...
По нажатию F8 студия рушится :(
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.01.2006 (Вс) 9:30

Да собственно, строку надо byval...
А массив байт пошёл бы.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 15.01.2006 (Вс) 9:58

To GSerg - да это я уже переделывал после первого обрушения несколько раз, выше приведенный кусок практически содран с вот этого работающего сокета
Код: Выделить всё

Private Function GetData() As String
Dim bytes As Long
Dim RB As String * 16384
Dim Data As String
bytes = recv(aSocket, RB, 16384, 0)
  If bytes > 0 Then
   Data = Left$(RB, bytes)
   GetData = Data
  Else
   GetData = ""
  End If
End Function
Так что и без массива байт должно же идти... Причем, что мне совсем непонятно, если запускаю с нюля два сокета и кидаю на пересылку Text1, то приходит белиберда... а если 1234, то рушится.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.01.2006 (Вс) 10:11

GSerg писал(а):Да собственно, строку надо byval
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 15.01.2006 (Вс) 11:41

GSerg
Спасибо :)
P.S.: Блин, ну до чего ж я невнимательный... Сам же вам декларацию recv привел, а посмотреть на неё несудьба была :(
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 160

    TopList