Техническая поддержка :

Современные решения

для защиты Windows программ

и восстановления исходного кода

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


двоичное представление числа и сдвиг

Привет, 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"

Hello, Nick!
You wrote in conference fido7.ru.visual.basic to "Dmitriy Kozyrev" 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] = ;

Всего хорошего!
Дмитрий Козырев 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"

"Alexander Shherbakov"
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. А
чтобы ей воспользоваться, придется вспомнить ДОС.


--
Сергей Мерзликин
www.smsoft.ru/ru/

>
>
> Удачи!
>


* Origin: Sovintel (2:5020/400)


Re: двоичное представление числа и сдвиг

From: "Sergey Merzlikin"

>
> Предлагаю свой вариант (на 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



--
Сергей Мерзликин
www.smsoft.ru/ru/


* Origin: Sovintel (2:5020/400)


Re: VB6: Events & CreateObject()

From: "Сулейманов Тимур"


Привет всем. Спасиба за участие ...

В общем то случай таков:
Классы, к экземплярам которых нужно приделывать события -
классы чтения данных из файлов в различных форматах.

Есть программа на VB, которая создает экземпляры этих
классов и вызывает всегда один и тот же метод - LoadFromFile.
Классы могут иметь много разных методов и свойств, но LoadFromFile
иметь обязаны. В реестре в опр. ключе хранится список GUID-ов,
который дополняется при регистрации каждого из классов, а "программа на VB"
сканит список, получает набор форматов и предоставляет пользователю
возможность
выбрать нужный формат и прочитать данные.

Для хранения данных в памяти есть обобщенный класс, все объекты
записывают данные в него. Естественно, раннее
связывание не подходит, так как списох может дополняться и на этапе
компилляции "программы на VB" известен всего лишь один класс формата (на
сегодня).

В общем то все бы хорошо, и даже все уже реализовано :-), кроме:

событие нужно для ПРОГРЕССБАРА при чтении/записи файлов большого объёма.

Hе думал ни гадал, что так непросто это сделать (событие)
когда проектировал всю эту ботву...

А кто про IConnectionPoint глубже копал, отзовитесь???

Конечно, напрашивается решение:
Объявить во независимой библиотеке абстрактный базовый класс с событием,
статически подключать его к каждой библиотеке с классами форматов
и реализовывать его наследников... Видимо так и придется делать.

С уважением, Сулейманов Тимур
--
Timson

* Origin: OOO BIS (2:5020/400)



Назад Содержание Вперед




Главная     Программы     Статьи     Разное     Форум     Контакты