Как правильно скопировать символьный массив в байтовый?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение Dimon111 » 22.03.2013 (Пт) 19:05

Хакер писал(а):Dimon111, если ты продолжишь грешить [url=[url=http://yandex.kz/yandsearch?rdrnd=7847&text=оверквоттингом]123[/url]]оверквоттингом[/url], ты будешь наказан. :!:

Ок. Наказывать у нас любят.

Сейчас приляпал FTDIшку к PC. Не поленился. Хоть она ничего не выдаёт, порт открывается нормально и обращение к FR_Read идёт. Эффект зависания я получил. Вот код:

Код: Выделить всё
Dim ByteMass(256) As Byte

Private Declare Function FT_Read Lib "FTD2XX.DLL" (ByVal Handle As Long, ByRef lpBufferFirstElm As Byte, ByVal lngBufferSize As Long, ByRef lngBytesReturned As Long) As Long

Private Sub ReadStr(BytesRead As Long)                        'Подпрограмма приема
Dim ftStatus As Long, I As Single, Ch As String               '
    lngBytesRetuned = 0                                       'Обнулить счетчик прочитанных байт
    ftStatus = FT_Read(Handle, ByteMass(1), BytesRead, lngBytesRetuned) '
    If (ftStatus = FT_IO_ERROR) Then OutLog "IO_ERROR"        'Если произошла ошибка приема - выдать сообщение
End Sub

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение ger_kar » 22.03.2013 (Пт) 19:15

Dimon111 писал(а):Ну так может покажете код? Я бы сравнил с тем, что писал... Объявление функции, массива, вызов...

Код: Выделить всё
Option Explicit


Private Declare Function FT_Read _
                Lib "ftd2xx.dll" _
                (ByVal Handle As Long, _
                 ByVal lpBuffer As Long, _
                 ByVal lngBufferSize As Long, _
                 ByRef lngBytesReturned As Long) As Long
               
Private Declare Function FT_Read2 _
                Lib "ftd2xx.dll" _
                Alias "FT_Read" _
                (ByVal Handle As Long, _
                 ByRef lpBuffer As Byte, _
                 ByVal lngBufferSize As Long, _
                 ByRef lngBytesReturned As Long) As Long
               



Private Sub Command1_Click()
    Dim lpBuffer            As Long
    Dim MyArray(255)        As Byte
    Dim lngBytesReturned    As Long
   
    lpBuffer = VarPtr(MyArray(0))
    FT_Read 0, lpBuffer, 255, lngBytesReturned
   
End Sub

Private Sub Command2_Click()
   
    Dim MyArray(255)        As Byte
    Dim lngBytesReturned    As Long
   
    FT_Read2 0, MyArray(0), 255, lngBytesReturned
   
End Sub
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 22.03.2013 (Пт) 19:17

Dimon111 писал(а):Вот код:

Какой-то он сильно подозрительный.

Dimon111 писал(а):Dim ByteMass(256) As Byte

Почему не написать Dim ByteMass(1 To 256) As Byte?

Dimon111 писал(а):Private Sub ReadStr(BytesRead As Long)

Что за переменная BytesRead?

Dimon111 писал(а):lngBytesRetuned = 0                                       'Обнулить счетчик прочитанных байт

Во-первых, эта переменная не объявленя, а во-вторых, а нафига его обнулять-то?

Dimon111 писал(а):ftStatus = FT_Read(Handle, ByteMass(1), BytesRead, lngBytesRetuned)

Во-первых, не вижу объявления переменной Handle.
Во-вторых, сильно подозреваю, что тут должно быть так: ftStatus = FT_Read(Handle, ByteMass(1), 256, BytesRead), 256 - размер буфера.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 22.03.2013 (Пт) 19:22

ger_kar писал(а):Dim MyArray(255)        As Byte

Ну что за привычка, ты же на .NET не пишешь...
Твой код не будет работать, если он использует Option Base 1.

ger_kar писал(а):FT_Read 0, lpBuffer, 255, lngBytesReturned

Почему 255? Массив 0 to 255 состоит из 256 элементов.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение ger_kar » 22.03.2013 (Пт) 19:25

Вот. Даже приблизительно ничего не зависает, хоть так вызов идет, хоть сяк.

У тебя массив начинается с элемента 0, но ты упорно передаешь 1.
Что содержится у тебя в BytesRead тоже непонятно.
Если передать вместо нулевого элемента первый, то соответственно адрес сдвинется и функция запишет за пределы буфера. Вот тебе и зависон.
Далее длина буфера должна быть на 1 ячейку длиннее длины массива, для завершающего нуля.
И все будет работать.
Бороться и искать, найти и перепрятать

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re:

Сообщение Dimon111 » 22.03.2013 (Пт) 19:28

Qwertiy писал(а):
Dimon111 писал(а):Вот код:

Какой-то он сильно подозрительный.

Dimon111 писал(а):Dim ByteMass(256) As Byte

Почему не написать Dim ByteMass(1 To 256) As Byte?

Dimon111 писал(а):Private Sub ReadStr(BytesRead As Long)

Что за переменная BytesRead?

Dimon111 писал(а):lngBytesRetuned = 0                                       'Обнулить счетчик прочитанных байт

Во-первых, эта переменная не объявленя, а во-вторых, а нафига его обнулять-то?

Dimon111 писал(а):ftStatus = FT_Read(Handle, ByteMass(1), BytesRead, lngBytesRetuned)

Во-первых, не вижу объявления переменной Handle.
Во-вторых, сильно подозреваю, что тут должно быть так: ftStatus = FT_Read(Handle, ByteMass(1), 256, BytesRead), 256 - размер буфера.

BytesRead - число ожидаемых байт. Dim Handle As Long - описатель порта, получаемый при его открытии. Зачем писать 1 To 256 я не понял. По - моему и так корректно. Во всяком случае работает. Обнулять может и не надо. 256 мне не нужно. Данные приходят раз в секунду по 35 байт. Таймаут установлен 1.5с: FT_SetTimeouts(Handle, 1500, 0). FT_Read ждёт 1.5с прихода указанного количества байт и потом отдаёт управление.

Переменная Dim lngBytesRetuned As Long объявлена глобальной, поскольку число прочитанных байт используется ещё много где.

Чтобы не плодить постов - пишу Option Base 1 у меня есть.
Последний раз редактировалось Dimon111 22.03.2013 (Пт) 19:37, всего редактировалось 3 раз(а).

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение Dimon111 » 22.03.2013 (Пт) 19:30

ger_kar писал(а):Вот. Даже приблизительно ничего не зависает, хоть так вызов идет, хоть сяк.

У тебя массив начинается с элемента 0, но ты упорно передаешь 1.
Что содержится у тебя в BytesRead тоже непонятно.
Если передать вместо нулевого элемента первый, то соответственно адрес сдвинется и функция запишет за пределы буфера. Вот тебе и зависон.
Далее длина буфера должна быть на 1 ячейку длиннее длины массива, для завершающего нуля.
И все будет работать.

Дык. Буфер объявлен размером 256. Ну нравится мне с первого элемента. Никаких зависонов по этому поводу никогда не было.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение ger_kar » 22.03.2013 (Пт) 19:31

Qwertiy писал(а):Ну что за привычка, ты же на .NET не пишешь...

У меня везде выравнивание и Net тут совсем не причем.

Qwertiy писал(а):Твой код не будет работать, если он использует Option Base 1.
Ну так у него же нету Option Base и вообще надо думать что ты делаешь. Кто думает у того все будет работать.
Qwertiy писал(а):Почему 255? Массив 0 to 255 состоит из 256 элементов.
На всякий пожарный случай, а вдруг функция еще и завершающий ноль пропишет за пределами. Я же первый раз эту функцию вижу, скачал драйвер извлек библу, проверил вызов и все :). Вобщем лучше больше, чем записать помимо буфера.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение ger_kar » 22.03.2013 (Пт) 19:37

Dimon111 писал(а): Зачем писать 1 To 256 я не понял. По - моему и так корректно.
Ну вот когда поймешь, тогда и дело пойдет. И падать не будет, а все будет работать как надо.
Dimon111 писал(а):Дык. Буфер объявлен размером 256. Ну нравится мне с первого элемента
Ну тогда Option Base 1 объявляй.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 22.03.2013 (Пт) 19:48

ger_kar писал(а):У тебя массив начинается с элемента 0, но ты упорно передаешь 1.

Это не важно. Верхняя граница позволяет. в отличие от твоего варианта, при передаче первого элемента будет работать везде.

ger_kar писал(а):Далее длина буфера должна быть на 1 ячейку длиннее длины массива, для завершающего нуля.

Хочешь сказать, что возвращается строка, а не двоичные данные?

Dimon111 писал(а):Зачем писать 1 To 256 я не понял. По - моему и так корректно.

Чтобы работало одинаково независимо от Option Base. Вообще, это хороший стиль, явно указывать обе границы.

Dimon111 писал(а):256 мне не нужно. Данные приходят раз в секунду по 35 байт.

Тогда почему в массиве 256 байт? Слабо сделать правильно и передать размер буфера, а не фигню?

Dimon111 писал(а):Чтобы не плодить постов - пишу Option Base 1 у меня есть.

Вот, ger_kar :lol:

Dimon111 писал(а):Дык. Буфер объявлен размером 256. Ну нравится мне с первого элемента. Никаких зависонов по этому поводу никогда не было.

С этим согласен, в таком варианте оно должно быть безвредно, даже если индексация с 0.

ger_kar писал(а):У меня везде выравнивание и Net тут совсем не причем.

.NET запрещает указывать нижнюю границу отличную от 0, поэтому не вижу смысла вообще её там писать.

ger_kar писал(а):Ну так у него же нету Option Base и вообще надо думать что ты делаешь. Кто думает у того все будет работать.

Он же сказал, что есть. В любом случае, на работе его кода это не скажется, в отличие от твоего.

Что-то кажется, я одно и то же пишу :(
А вы тут наверняка ещё понаписали, пока я писал...

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re:

Сообщение Dimon111 » 22.03.2013 (Пт) 19:55

Qwertiy писал(а):
Dimon111 писал(а):256 мне не нужно. Данные приходят раз в секунду по 35 байт.

Тогда почему в массиве 256 байт? Слабо сделать правильно и передать размер буфера, а не фигню?

Связано это с асинхронным приходом кадра и потерей кадров. В дальнейшем планирую в таких случаях склеивать кадр. Можно было и 128 и 100 сделать. Не критично.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение ger_kar » 22.03.2013 (Пт) 19:57

Qwertiy писал(а):Хочешь сказать, что возвращается строка, а не двоичные данные?
Я понятия не имею, что там возвращается. Можно вообще не байтовый массив или строку передавать а выделить память под буфер и передавать на него указатель. Но лучше пусть будет перерасход одной ячейки, чем перезапись памяти за пределом буфера. Поэтому, что-бы не гадать я сделал буфер чуть длиннее.
Qwertiy писал(а):Он же сказал, что есть. В любом случае, на работе его кода это не скажется, в отличие от твоего.
Мой код у меня отлично работает, а у него должен работать его собственный и что-бы он таки работал, нужно понимание того, что ты делаешь.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение Хакер » 22.03.2013 (Пт) 19:58

Тема закрывается до завтра. У нас не столько наказывать любят, сколько любят гадить.
Dimon111 отреагировал на моё предупреждение, но продолжил цитировать огромные посты целиком.

Поэтому предлагаю ему почитать, что такое оверквотинг:
Оверквотинг

А то наверное он не понимает, за что его хотят наказать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение Хакер » 23.03.2013 (Сб) 20:47

Тема открыта.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение ger_kar » 23.03.2013 (Сб) 20:50

Dimon111 Получилось?
Бороться и искать, найти и перепрятать

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение Dimon111 » 04.04.2013 (Чт) 11:57

ger_kar писал(а):Dimon111 Получилось?

Получилось. Всё работает, а с кольцевым буфером работает ещё лучше.

И вопрос с символьными массивами отпал сам собой.

Вот только учитывая мой малый опыт виснет. Дело в том, что если я открываю порт:
Код: Выделить всё
While (FT_OpenEx("Fucing_BS", FT_OPEN_BY_DESCRIPTION, Handle) <> FT_OK)


и моё приложение вылетает по ошибке (на стадии программирования для меня это неизбежно), то порт не закрывается. Следующий запуск приложения не находит этот порт. Приложение закрываю, порт отключаю и включаю вновь. В 90% случаев всё ОК. Но бывает что подвиснет так, что убить приложение можно только убив процесс VB6. При этом закрывается вся среда программирования.

Ну в общем терпимо, поскольку в нормальном режиме глюков не замечено.

А попутно вопрос - нет ли возможности всё - таки выполнить процедуру закрытия порта при аварийном завершении программы?

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение Dimon111 » 04.04.2013 (Чт) 12:06

Посетил меня ещё один аналогичный недуг. При передаче. Объявляю функцию для передачи в байтовом формате:
Private Declare Function FT_WriteB _
Lib "ftd2xx.dll" _
Alias "FT_Write" _
(ByVal Handle As Long, _
ByRef lpBuffer As Byte, _
ByVal lngBufferSize As Long, _
ByRef BytesWritten As Long) As Long


Объявляю массив и константы:
Код: Выделить всё
Dim FT_Mass(1 To 256) As Byte
Dim BytesWritten As Long


Передаю массив:
Код: Выделить всё
FT_Mass(1) = Val("S")
FT_Mass(2) = &HD
FT_Mass(3) = &HA
If FT_WriteB(Handle, FT_Mass(1), 3, BytesWritten) <> FT_OK Then OutLog "Write Failed" '


Принимаются нули! Вроде и массив передаю по ссылке и сообщения о некорректной работе в ЛОГ не приходят. И даже BytesWritten возвращает =3. Где ж я теперь накосячил??

АААА! Val("S") возвращает 0! Блин. А как же мне узнать код этого "P"?? Asc("P") меня спасло. Вопрос закрыт.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2013 (Чт) 12:45

Dimon111 писал(а):АААА! Val("S") возвращает 0! Блин. А как же мне узнать код этого "P"?? Asc("P") меня спасло. Вопрос закрыт.

Не мог не вспомнить:
Qwertiy писал(а):
Dimon111 писал(а):Будем использовать вариант без функции Val. Спасибо за ответ.

Будет весело, если окажется, что надо с Asc или AscW...
:lol:

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re:

Сообщение Dimon111 » 04.04.2013 (Чт) 12:59

Qwertiy писал(а):Будет весело, если окажется, что надо с Asc или AscW...

Чет почитал я описание и не уловил разницы между Asc и AscW. А так работает. Но опять через ж.

Надо отправить время в байтах.

Код: Выделить всё
Dim Hour As Byte, Minut As Byte, Secund As Byte
Dim FT_Mass(1 To 256) As Byte
Dim BytesWritten As Long

Hour = Val(Left(Time, 2))
Minut = Val(Mid(Time, 4))
Secund = Val(Right(Time, 2))

FT_Mass(1) = Asc("V")
FT_Mass(2) = Hour
FT_Mass(3) = Minut
FT_Mass(4) = Secund
FT_Mass(5) = &HD
FT_Mass(6) = &HA
If FT_WriteB(Handle, FT_Mass(1), 6, BytesWritten) <> FT_OK Then OutLog "Write Failed" '
OutLog "Команда синхро: " & Hour & ":" & Minut & ":" & Secund

Вот вроде и время в лог пишет и байты передаёт (если я вместо Hour, Minut, Secund пишу числа). Но если передавать именно Hour, Minut, Secund, то передаёт нули.

Подозреваю что Hour = Val(Left(Time, 2)) преобразует этот тип из байтового во что - то другое. Пока бьюсь над этим...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2013 (Чт) 13:27

Dimon111 писал(а):Надо отправить время в байтах.

Чего-то ты не то делаешь... Откуда взялось время в строке?

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re:

Сообщение Dimon111 » 04.04.2013 (Чт) 13:33

Qwertiy писал(а):
Dimon111 писал(а):Надо отправить время в байтах.

Чего-то ты не то делаешь... Откуда взялось время в строке?

Hour = Val(Left(Time, 2))

Из Time. Это в VB переменная, содержащая текущее время. Left здесь выделяет часы. Да всё то. Я вывожу в лог:

Код: Выделить всё
OutLog "Команда синхро: " & Hour & ":" & Minut & ":" & Secund


И получаю в логе:
Команда синхро: 14:32:35

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2013 (Чт) 14:07

Так зачем строку делать-то?

Чем не устраивает:
Код: Выделить всё
Dim Cur As Date, H As Byte, M As Byte, S As Byte
Cur = Now
H = Hour(Cur)
M = Minute(Cur)
S = Second(Cur)

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как правильно скопировать символьный массив в байтовый?

Сообщение Dimon111 » 04.04.2013 (Чт) 15:18

Всё работает. Виноват был фильтр на приёмной стороне char *read_line(char buf[])

Код: Выделить всё
//if(c >= 0x20 && c < 0x7f)//Если принятый символ в допустимых границах
//{
buf[cnt++] = c;      //записать принятый символ в буфер.
//putchar(c);      //отобразить его. Эхо
//}

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2013 (Чт) 15:30

Не понял.
А кто у тебя приёмная сторона? Я думал, драйвер...
Так зачем тебе строки для времени?

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re:

Сообщение Dimon111 » 04.04.2013 (Чт) 15:36

Qwertiy писал(а):Не понял.
А кто у тебя приёмная сторона? Я думал, драйвер...
Так зачем тебе строки для времени?

Приёмная сторона - устройство - базовая станция, передающая это время по беспроводной сети. Т.е. для компьютера это просто FT232.

Строк для времени у меня вроде нет. Есть три переменные типа Integer, куда вводится время. Его я и передаю из компьютера.

Данные должны быть в байтовом формате...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2013 (Чт) 16:47

Dimon111 писал(а):Строк для времени у меня вроде нет.

А Val и Left по-твоему с чем работают?

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re:

Сообщение Dimon111 » 04.04.2013 (Чт) 16:54

Qwertiy писал(а):
Dimon111 писал(а):Строк для времени у меня вроде нет.

А Val и Left по-твоему с чем работают?

Они работают со строковой переменной Time. Это не моя переменная. В ней VB возвращает текущее время.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re:

Сообщение Dimon111 » 04.04.2013 (Чт) 16:54

Qwertiy писал(а):
Dimon111 писал(а):Строк для времени у меня вроде нет.

А Val и Left по-твоему с чем работают?

Они работают со строковой переменной Time. Это не моя переменная. В ней VB возвращает текущее время.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2013 (Чт) 17:41

Dimon111 писал(а):Они работают со строковой переменной Time. Это не моя переменная. В ней VB возвращает текущее время.

Qwertiy писал(а):Чем не устраивает:
Код: Выделить всё
Dim Cur As Date, H As Byte, M As Byte, S As Byte
Cur = Now
H = Hour(Cur)
M = Minute(Cur)
S = Second(Cur)

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.04.2013 (Чт) 17:43

Qwertiy писал(а):В ней VB возвращает текущее время.

И да, тогда так делать неправильно, поскольку время может поменяться между вызовами.

Пред.След.

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

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

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

    TopList