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

для защиты Windows приложений

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

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)