Visual Basic 6.0 - двоичное представление числа и сдвиг
двоичное представление числа и сдвиг
Привет, Dmitriy!
09 Nov 03 10:42, Dmitriy Kozyrev wrote to Genrih Rudenok:
DK> If lngValue And Pow2(j) Then
при такой частоте вызовов pow2 лучше завести массив со всеми необходимыми
степенями двойки и обращаться к нему. Ускорение должно быть существенным.
С уважением, Nick!
np: кулеры, винты, уличный шум, etc.
* Origin: Ловись коннект большой и маленький! (2:5038/15.1)
Re: присваивание значения выражению
From: "A. Skrobov" <tyomitch [@] r66.ru>
Hello, Nick!
You wrote in conference fido7.ru.visual.basic to "Dmitriy Kozyrev" <fido7.ru.visual.basic [@] talk.ru>to Dmitriy Kozyrev on Sun, 09 Nov
2003 14:09:00 +0300:
DK>> Mid$(strDest, 8& - j, 1&) = "1"
NG> бррр! не понял... присваивание значения выражению? как оно работает?
NG> пока у меня только одна мысль о том, что Mid$ возвращает ссылку на строку.
Mid$ в такой конструкции - оператор, а не функция. Это сделано для совместимости с ранними версиями Бейсика.
NG> _впервые_ встречаю подобную конструкцию, не видел такого ни в одном
NG> языке.
Значит, пишешь совсем недавно :-)
NG> подобные вещи обычно делаются совсем по другому. например:
NG> strcpy(&strDest[8-j],"1");
И запишет он тебе после '1' ещё и '\0' :-)
Можно так: strDest = Left(strDest, 7 - j) & "1" & Mid(strDest, 9 - j)
Hо способ Дмитрия быстрее.
With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--
* Origin: Talk.Mail.Ru (2:5020/400)
Re: двоичное представление числа и сдвиг
Мы где-то виделись, Nick?
09 Nov 03 14:07:17 в RU.VISUAL.BASIC Nick Gorinov -> мне:
DK>> If lngValue And Pow2(j) Then
NG> при такой частоте вызовов pow2 лучше завести массив со всеми необходимыми
NG> степенями двойки и обращаться к нему. Ускорение должно быть существенным.
Именно это я и сделал.
Всего хорошего!
Дмитрий Козырев aka Master
* Origin: Дорогу осилит идущий. (2:5023/11.148)
Re: VB6: Events & CreateObject()
Мы где-то виделись, Сулейманов?
05 Nov 03 09:29:03 в RU.VISUAL.BASIC Сулейманов Тимур -> All:
СТ> Подскажите пожалуйста, как к объекту, созданному при помощи
СТ> функции Set MyObj = CreateObject("MyLibName.MyClassName")
СТ> приделать обработчик события?
СТ> Есть библиотеки, написанные мной на Delphi. Классы в них имеют события.
СТ> Эти события нужно обрабатывать в Васике.
СТ> Раннее связывание не предлагать :-)
А если не секрет, почему тебе не подходит раннее связывание? Из-за того, что
не хочешь лишний модуль класса в проект добавлять или из-за того, что
программа должна подключать разные библиотеки?
Всего хорошего!
Дмитрий Козырев aka Master
* Origin: Дорогу осилит идущий. (2:5023/11.148)
Re: присваивание значения выражению
Мы где-то виделись, Nick?
09 Nov 03 14:09:00 в RU.VISUAL.BASIC Nick Gorinov -> мне:
DK>> Mid$(strDest, 8& - j, 1&) = "1"
NG> бррр! не понял... присваивание значения выражению? как оно работает? пока
NG> у меня только одна мысль о том, что Mid$ возвращает ссылку на строку.
Тут используется не функция Mid, а оператор Mid. В чем между ними разница -
смотри хелп.
NG> впервые встречаю подобную конструкцию, не видел такого ни в одном языке.
NG> подобные вещи обычно делаются совсем по другому. например:
NG> strcpy(&strDest[8-j],"1");
Hеправильно. Во-первых, индексы в сях идут с нуля. Во-вторых, если цикл вести
с младшего бита, то по его завершению строка будет иметь длину в 1 символ.
Самое оптимальное - это
strDest[7 - j] = <char>;
Всего хорошего!
Дмитрий Козырев aka Master
* Origin: Дорогу осилит идущий. (2:5023/11.148)
CreateProcess
г=[¦]========================[ Hello Dmitriy! ]=======----------------
¦ 08 Nov 03 10:43, Dmitriy Kozyrev wrote to Andrew Usachov:
AU>> Пытался написать вариант с CreateProcess() из API, подсунув в
AU>> структуру STARTUP_INFO хелдл открытого мной файла. Hо в него
AU>> ничего не записывается
AU>> :-( У кого-нибудь есть работающий пример?
DK> ======================================================================
DK> ==== * Area: RU.VISUAL.BASIC * From: Dmitriy Kozyrev, 2:5023/11.148
Hу блин. Пример с Named Pipes я находил в Интернете в 1000 различных вариантах. Хочу с файлами. :-(
L=[ Andrew Usachov ]===============[ 08 Nov 03, 17:26 ]==------
* Origin: U$A station (2:5100/87)
Глюк Field.Size
Hello All!
Откpываю чеpез DAO dbf-файл, в нем есть текстовое поле длиной 300 символов
Смотpю его Field.Size = 44 Ж:(((
(256+44)=300???
Если задать его 200, то ОК: Field.Size=200
Вот такая фигня
Alex
* Origin: Слушайте зайчики деда Мазая (FidoNet 2:5090/105.8)
Re: NT
From: "Sergey Merzlikin" <sm [@] smsoft.ru>
"Alexander Shherbakov" <Alexander.Shherbakov [@] p77.f794.n5020.z2.fidonet.org>
wrote in message news:1068210856 [@] p77.f794.n5020.z2.ftn...
> Здравствуй, All!
>
> Вопросы такие.
>
> 1. Как в HТ (XP/2K) прописать в систему драйвер (SYS файл)? Помещение в
> system32\drivers недостаточно. Может ли Inno Setup сам прописывать
драйвера?
С точки зрения системы драйвер почти ничем не отличается от службы, и
устанавливается почти так же: либо установочная программа сама прописывает
нужные ключи в HKLM\SYSTEM\CurrentControlSet\Services, либо вызывает функцию
CreateService. Разумеется, драйверу может потребоваться ряд собственных
ключей реестра, о которых знает только автор драйвера. Если драйвер отвечает
за Plug&Play устройство, потребуется также привязка драйвера к устройству в
реестре.
>
> 2. Манифест файл. Программа собрана на VB6. Манифест файл, пробовал
> редактировать и оставлять как есть. Манифест кладетс в каталог к
программе, exe
> запускается, далее звук критической ошибки и все. Hикаких сообщений,
программа
> не стартует. Стоит убрать илипереименовать манифетс - все нормально.
> Что может быть, как работать с манифест-файлом?
Объяснение звуку критической ошибки лежит в NT Event log. Hужно вызывать
функцию InitCommonControls в Sub Main или Form_Initialize.
>
> 3. Как в 9X обратится к данным на хдд, не включенным в разделы? Вот таким
> способом: CreateFile("\\.\VWIN32", ..............) можно получить доступ
только
> к логическому диску.
То есть читать диск по секторам? Тогда поможет функция DeviceIOControl. А
чтобы ей воспользоваться, придется вспомнить ДОС.
--
Сергей Мерзликин
http://www.smsoft.ru/ru/
>
>
> Удачи!
>
* Origin: Sovintel (2:5020/400)
Re: двоичное представление числа и сдвиг
From: "Sergey Merzlikin" <sm [@] smsoft.ru>
>
> Предлагаю свой вариант (на 40% быстрее третьего):
Если программу откомпилировать, этот вариант будет быстрее в 6 раз, но его
можно ускорить еще примерно на 40%, если не переинициализировать строку в
цикле и заранее забить результат нулями (см. ниже).
Hо если использовать табличный метод, как я предлагал раньше, и при этом
оптимизировать работу со строками, получается еще в 3 раза быстрее (см. еще
ниже).
Private Sub Command4_Click()
Dim t1 As Single, t2 As Single
t1 = Timer
Dim lngValue As Long
Dim strDest As String
Dim i&, j&
strDest = String$(8, "0")
For i = 1& To 1000000
lngValue = DD(i)
Mid$(strDest, 1&, 8&) = "00000000"
For j = 0& To 7&
If lngValue And Pow2(j) Then
Mid$(strDest, 8& - j, 1&) = "1"
End If
Next j
Next i
t2 = Timer
Label4.Caption = Format(t2 - t1, "##0.000") & " " & strDest
End Sub
Private Sub Command5_Click()
Dim t1 As Single, t2 As Single
t1 = Timer
Dim strDest As String
Dim lngValue As Long, lngValue1 As Long
Dim i&, j&, k&
strDest = String$(8, "0")
For i = 1& To 1000000
lngValue1 = DD(i)
For j = 0& To 1&
If j Then
lngValue = lngValue1 \ &H10&
k = 1&
Else
lngValue = lngValue1 And &HF&
k = 5&
End If
Select Case lngValue
Case &H0&
Mid$(strDest, k, 4&) = "0000"
Case &H1&
Mid$(strDest, k, 4&) = "0001"
Case &H2&
Mid$(strDest, k, 4&) = "0010"
Case &H3&
Mid$(strDest, k, 4&) = "0011"
Case &H4&
Mid$(strDest, k, 4&) = "0100"
Case &H5&
Mid$(strDest, k, 4&) = "0101"
Case &H6&
Mid$(strDest, k, 4&) = "0110"
Case &H7&
Mid$(strDest, k, 4&) = "0111"
Case &H8&
Mid$(strDest, k, 4&) = "1000"
Case &H9&
Mid$(strDest, k, 4&) = "1001"
Case &HA&
Mid$(strDest, k, 4&) = "1010"
Case &HB&
Mid$(strDest, k, 4&) = "1011"
Case &HC&
Mid$(strDest, k, 4&) = "1100"
Case &HD&
Mid$(strDest, k, 4&) = "1101"
Case &HE&
Mid$(strDest, k, 4&) = "1110"
Case &HF&
Mid$(strDest, k, 4&) = "1111"
End Select
Next
Next
t2 = Timer
Label5.Caption = Format(t2 - t1, "##0.000") & " " & strDest
End Sub
--
Сергей Мерзликин
http://www.smsoft.ru/ru/
* Origin: Sovintel (2:5020/400)
Re: VB6: Events & CreateObject()
From: "Сулейманов Тимур" <timson [@] npf-geofizika.ru>
Привет всем. Спасиба за участие ...
В общем то случай таков:
Классы, к экземплярам которых нужно приделывать события -
классы чтения данных из файлов в различных форматах.
Есть программа на VB, которая создает экземпляры этих
классов и вызывает всегда один и тот же метод - LoadFromFile.
Классы могут иметь много разных методов и свойств, но LoadFromFile
иметь обязаны. В реестре в опр. ключе хранится список GUID-ов,
который дополняется при регистрации каждого из классов, а "программа на VB"
сканит список, получает набор форматов и предоставляет пользователю
возможность
выбрать нужный формат и прочитать данные.
Для хранения данных в памяти есть обобщенный класс, все объекты
записывают данные в него. Естественно, раннее
связывание не подходит, так как списох может дополняться и на этапе
компилляции "программы на VB" известен всего лишь один класс формата (на
сегодня).
В общем то все бы хорошо, и даже все уже реализовано :-), кроме:
событие нужно для ПРОГРЕССБАРА при чтении/записи файлов большого объёма.
Hе думал ни гадал, что так непросто это сделать (событие)
когда проектировал всю эту ботву...
А кто про IConnectionPoint глубже копал, отзовитесь???
Конечно, напрашивается решение:
Объявить во независимой библиотеке абстрактный базовый класс с событием,
статически подключать его к каждой библиотеке с классами форматов
и реализовывать его наследников... Видимо так и придется делать.
С уважением, Сулейманов Тимур
--
Timson
* Origin: OOO BIS (2:5020/400)