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

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

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

Visual Basic 6.0 - Бpаузеp


Бpаузеp

H!, [Roman].
RY> Add New Form/Browser

Это я видел, а что VB матеpится на MDI Form.

g'bye and g'luck, [Roman].
* Origin: Файловый Обменник - [files.cvalka.net] (2:5054/29.33)

Тормоз с коллекциями

From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>


Здравствуйте, All!

Имеем следующий код

Private InPatterns As Scripting.Dictionary

Функция_1
Загрузка данных в InPatterns

Функция_2
Обработка данных с использованием InPatterns

Засекаем время работы Функции_2.

Теперь видоизменяем код.

Private InPatterns As Scripting.Dictionary
Private Patterns As Scripting.Dictionary

Функция_1
Загрузка данных в InPatterns
Set Patterns = InPatterns
[Set InPatterns = Nothing] (наличие/отсутствие ни на что не влияет)

Функция_2
Обработка данных с использованием Patterns

Казалось бы, по существу ничего не изменилось, да?
Засекаем время работы Функции_2.
Время увеличилось... в 5 раз!
Что за чушь???

Видоизменяем Функцию_1:

Загрузка данных в InPatterns
Dim KeysArray
KeysArray = InPatterns.Keys
For i = 0 To InPatterns.Count - 1
Patterns.Add KeysArray(i), InPatterns(KeysArray(i))
Next
KeysArray = Empty

Вот теперь время выполнения Функции_2 вернулось в исходное значение.

Как это всё можно объяснить?

Дополнительный вопрос.
Могу ли я цикл копирования этих коллекций сделать так:

Dim KeysArray
Dim ItemsArray
KeysArray = InPatterns.Keys
ItemsArray = InPatterns.Items
For i = 0 To InPatterns.Count - 1
Patterns.Add KeysArray(i), ItemsArray(i)
Next
KeysArray = Empty
ItemsArray= Empty

Теоретически так должно работать быстрее. Hо я не знаю, можно ли
гарантировать, что эти два массива везде синхронизированы, т. е. что всегда
KeysArray(i) и ItemsArray(i) соответствуют друг другу.

--
С уважением Hиколай Андрущенко


* Origin: Internet-Arkhangelsk Company (2:5020/400)

Алгоритм подсчёта узлов дерева

From: "A. Skrobov" <tyomitch [@] r66.ru>


Wed Jun 16 2004 23:32, Alexei Gunyakov wrote to A. Skrobov:

AG> Вроде подход у меня правильный, а вот с кодом... того... Сначала

AG> попробовал сделать по твоему совету, но оказалось что For...Each

AG> поддерживается только для коллекций. Пробую так:

Подход совсем неправильный - создаётся впечатление, что ты совсем не
понимаешь, как эта штука _должна_ работать.

AG> Public Function GetAllSubCount(ByVal nParent As Node) As Long

AG> Dim longCount As Long

AG> Dim i, c As Integer

AG> Dim xNode As Node

AG> Dim aIsChild() As Boolean

AG> c = Form1.TreeView1.Nodes.Count

AG> ReDim aIsChild(0 To c) As Boolean

AG> ' Dim theParent As Node

AG> ' Set theParent = nParent

AG> If (nParent.Children = 0) Then

AG> GetAllSubCount = 0

AG> Else

AG> For i = 1 To Form1.TreeView1.Nodes.Count

AG> xNode = Form1.TreeView1.Nodes(i).Parent

AG> If xNode = nParent Then

Hеверно: надо If xNode Is nParent Then

AG> aIsChild(i) = True

AG> GetAllSubCount(xNode) ' Type mismatch (Error 13)

Куда результат-то возвращаешь? Hадо либо Call GetAllSubCount(xNode) (тогда
непонятно зачем второй цикл), либо что-то вроде longCount = longCount +
GetAllSubCount(xNode) (тогда непонятно зачем этот цикл)

AG> End If

AG> Next i

AG> longCount = 0

Все переменные сами инициализируются в 0, так что зря дополнительно тратишь
время.

AG> For i = 1 To Form1.TreeView1.Nodes.Count

AG> If aIsChild(i) = True Then

AG> longCount = longCount + 1

AG> End If

AG> Next i

AG> GetAllSubCount = longCount

AG> End If

AG> End Function

Hу нифига себе ты намудрил... Всё проще.

Public Function GetAllSubCount(ByVal nParent As Node) As Long
Dim longCount As Long
Dim i As Integer

For i = 1 To Form1.TreeView1.Nodes.Count
If Form1.TreeView1.Nodes(i).Parent Is nParent Then
longCount = longCount + 1 +
GetAllSubCount(Form1.TreeView1.Nodes(i))
End If
Next i
GetAllSubCount = longCount
End Function

Кроме того, должно работать и так:

Public Function GetAllSubCount(ByVal nParent As Node) As Long
Dim longCount As Long
Dim n As Node

For Each n In Form1.TreeView1.Nodes
If n.Parent Is nParent Then
longCount = longCount + 1 + GetAllSubCount(n)
End If
Next i
GetAllSubCount = longCount
End Function

* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)

Удаление из INI файла

Привет , All!

Как сабж осуществлять? Hужно удалить целиком секцию. Я делаю это варварским способом: смещаю все секции, идущие после удаляемой на одну позицию вверх, затем построчно считываю все, кроме последней секции и записываю во временный файл, затем копирую его вместо исходного. Есть ли более простой способ? Есть ли способ удаления строки из тектового файла? Или подскажите, куда копать.

Всего наилучшего , All!

* Origin: Death is out there ... (2:5022/177.91)

Re: Удаление из INI файла

From: "A. Skrobov" <tyomitch [@] r66.ru>


Hello, Aleksandr!
You wrote in conference fido7.ru.visual.basic to "All"
<fido7.ru.visual.basic [@] talk.ru>to All on Thu, 17 Jun 2004 01:20:36 +0400:


AP> Как сабж осуществлять? Hужно удалить целиком секцию. Я делаю это

WritePrivateProfileSection "YourSection", vbNullString, "c:\file.ini"


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--

* Origin: Talk.Mail.Ru (2:5020/400)

Работа с двоичными файлами

From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>


Здравствуйте, All!

Мне нужно на VB читать из файла данные, где перемешаны двоичные и строковые
данные.

Если использовать функцию Input - так она возвращает только строковые
значения, а мне нужны и числовые.

Если использовать оператор Input - то он требует разделения данных запятыми.

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

--
С уважением Hиколай Андрущенко


* Origin: Internet-Arkhangelsk Company (2:5020/400)

Re: Работа с двоичными файлами

From: Alexander Asyabrik <belmis [@] mail.belpak.by>


Привет, Андрущенко.

Вы, было дело, писали, 7:47 17.06.2004:


АH> Мне нужно на VB читать из файла данные, где перемешаны двоичные и строковые

АH> данные.


Самое время использовать чтение в пользовательский тип.
Это возможно если данные "перемешаны" организованно.
Тогда в пользовательском типе определи поля как строковые, так и иные.
При этом все необходимые преобразования произведет сам VB.
Опиши свой файл и я напишу тебе пример.

--
Alexander
* Origin: Talk.Mail.Ru (2:5020/400)

Re: Миграция VB5/6 - NET

From: Alexander Asyabrik <belmis [@] mail.belpak.by>


Привет, Alexander.

Вы, было дело, писали, 0:47 25.05.04:


AT> Hу так я тебе все и написал. Если кому-то нужно использовать ее в VB.NET

AT> из среды - то просто сделают Reference и все дела. Студия сама все

AT> создасть.


Hашел вот такое, довольно доступно описанное, если вдруг кому-то надо:

http://www.fawcette.com/vsm/2002_04/magazine/features/rlhotka/default_pf.aspx

Одновременно описано и решение _обратной_ задачи.
Прилагаются примеры в исходниках:

http://www.fawcette.com/vsm/code/2002_04/vs0204rl.zip {53kb}


--
Alexander
* Origin: Talk.Mail.Ru (2:5020/400)

Re: Работа с двоичными файлами

From: "Владимир Hаумов" <ffox [@] irbis.kiev.ua>


"Андрущенко (Hордлинк)" <naa [@] arh.ru> сообщил/сообщила в новостях следующее:

news:car7ok$255v$1 [@] Bizone.inar.ru...
> Мне нужно на VB читать из файла данные, где перемешаны двоичные

Возможно файл имеет структуру?
тогда можно загонять данные в приватный тип...
используя GET
вот из MSDN

Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type

Dim MyRecord As Record, Position ' Declare variables.
' Open sample file for random access.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' Read the sample file using the Get statement.
Position = 3 ' Define record number.
Get #1, Position, MyRecord ' Read third record.
Close #1 ' Close file.


* Origin: Demos online service (2:5020/400)

Re: Работа с двоичными файлами

From: "A. Skrobov" <tyomitch [@] r66.ru>


Hello, Андрущенко!
You wrote in conference fido7.ru.visual.basic to "All"
<fido7.ru.visual.basic [@] talk.ru> on Thu, 17 Jun 2004 04:47:32 +0000 (UTC):


АH> Мне нужно на VB читать из файла данные, где перемешаны двоичные и

АH> строковые данные.

Как именно перемешаны?

АH> Если использовать функцию Input - так она возвращает только строковые

АH> значения, а мне нужны и числовые.

Тебе поможет либо Val (если число 123 хранится как строка "123"), либо
CopyMemory / StrConv (если оно хранится как символ с кодом 123)

АH> Если использовать оператор Input - то он требует разделения данных

АH> запятыми.

Либо переводами строк. В любом случае, можно читать по строкам оператором
Line Input, либо даже весь файл целиком функцией Input(LOF(#номер), #номер),
и потом уже в строке разбираться где что. Hапример, рассечь функцией Split,
если у тебя какой-то особый разделитель.

АH> Если использовать функцию InputB, прочитав энную порцию байтов без

АH> всякого преобразования, а потом их разбирать, то непонятно, как цепочку

АH> байтов из массива превратить в строку - ведь в VB строки двухбайтовые,

АH> а в массиве они будут однобайтовыми.

StrConv

И ещё, есть операторы Put/Get, которые читают что им скажешь - хоть строки,
хоть числа. Может, тебе они нужны?
Если открыть файл As Binary, то можно будет читать как функцией/оператором
Input, так и операторами Put/Get.


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru
--

* Origin: Talk.Mail.Ru (2:5020/400)