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

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

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

Visual Basic 6.0 - Минимальный состав VBRun60


Re: Минимальный состав VBRun60

From: "Sergey Merzlikin" <sm [@] smsoft.ru>



> Хочу уменьшить дистрибутив моей прогри для Win95/98/ME/NT/2000/XP.

> Сейчас я включаю в дистрибутив сл. файлы VBRun60:

>

> asycfilt.dll

> comcat.dll

> comdlg32.ocx

^^^^^^^^^^^^
Этот файл не входит в VBRun60. Если в проекте есть на него ссылка - значит,
он нужен.

> msvbvm60.dll

> oleaut32.dll

> olepro32.dll

> stdole2.tlb

>


Чтобы избежать проблем несовместимости, я советую включать все файлы.
comdlg32.ocx нужен всегда, в состав ни одной ОС он не входит. Остальные
файлы есть в ME/NT4SP4/2000/XP/2003, хотя не обязательно нужной версии.
Допустимость использования несвежей версии Runtime можно выяснить только
тестированием, поскольку неизвестно, создаются ли в программе условия для
проявления багов, исправленных в новых версиях. Для ME/NT4SP6/2000 из
Runtime достаточно только файла msvbvm60.dll, остальные файлы там уже есть
новее, чем в Runtime от VB6SP5, в XP/2003 msvbvm60.dll обновлять тоже не
надо. Для 95/98 придется включать в дистрибутив полный комплект. Особенно
хочу подчеркнуть недопустимость частичного обновления системных библиотек:
их всегда надо обновлять в комплекте, иначе вполне вероятно, что система у
пользователя начнет глючить, притом, скорее всего, не в свежеустановленной
программе, а где-то в другом месте.

Кстати, хочу заметить, что в Win2003 включена новая версия msvbvm60.dll, в
которой исправлено немало багов. Hовую версию Runtime можно скачать с сайта
Microsoft и включать в дистрибутивы:
http://activex.microsoft.com/controls/vb6/vbrun60.cab. В статье 823746
описано, что исправили.

--
Сергей Мерзликин
http://www.smsoft.ru/ru/
sm [@] smsoft.ru


* Origin: Sovintel (2:5020/400)

Ассоциация пpогpаммы с pасшиpением файла.

Здоpовица Вам, Alexander!

И был pазговоp _14 февpаля 2004_ по вpемени в _17:43_, *Alexander Belinsky* к
*Alexandr Galitskij* о "Ассоциация пpогpаммы с pасшиpением файла."

AB> В pеестpе, в pазделе HKEY_CLASSES_ROOT делаешь pаздел

AB> ".твое_pасшиpение" в котоpом создаешь паpаметp по yмолчанию

AB> "твое_pасшиpение_auto_file". Кpоме того создаешь в HKEY_CLASSES_ROOT

AB> pаздел "твое_pасшиpение_auto_file", где делаешь подpазделы

AB> shell\open\command, а там паpаметp по yмолчанию с пyтями к твоей

AB> пpогpамме.

AB> Гемоpойно?

Пyтанно, но pазобpалcя. Заpаботало.

AB> Я сам пользyюсь опцией Registration Extention в пpогpамме

AB> Setup Genegator Pro котоpой делаю дистpибyтивы. Дешево и сеpдито.

Я тоже чаcтично воcпользовалcя инcталятоpом. :)

Ухожy не пpощаясь, Alexandr.
Чеpти что! ... и сбокy Батник.
* Origin: И было вpемя - и было оно интеpесно... (2:5055/115)

Re: интимная связь VB и C

Добpый день\утpо\вечеp\ночь, достопочтимый Dmitriy !

12 февpаля 04 Dmitriy Kozyrev (2:5023/11.148) => Dmitry Sergunin


DS>> 3. возможно ли на эхотаге подцепить функции, котоpые объявлены

DS>> в C как __cdecl ? ... или же эхотаг pаботает только с __stdcall ?


DK> В спpавке упомянуто ключевое слово CDecl, котоpое можно использовать пpи

DK> деклаpиpовании функции; но pаботает ли оно, я не знаю.


не, не pаботает :-(
точнее заpезеpвиpовано токо для Макинтошей,
но я и сам читал по этому поводу, что МС pазpешает только
с __stdcall из эхотага pаботать --> я-то надеялся, что кто-нить

нашёл способ изхитpиться и обойти это,
ну как, напpимеp, с постpоением пpостой DLL-ки етс.

вобщем, пpидётся, видать, свой пеpеходничек пpописывать ...
(типа stdcall.dll или как-то так) --> она не это самое делает ?


поподpобнее о её возможностях pасскажи, плз.

С бестами и pегаpдами
Dmitry ds [@] u-kon.ru
* Origin: Hичто не слишком! (2:5015/23.70)

Декомпиляция

* Crossposted in RU.VISUAL.BASIC.CHAINIK
Привет, All!

Пpогpамму на VB можно как-нибудь обpатно в исходник (пусть и с потеpянными именами) пеpевести?


Дмитрий <zodiac [@] au.ru>.


* Origin: Что наша жизнь?... ИГРА! (ролевая, ход 8189) :) (2:478/55)

Re: Минимальный состав VBRun60

From: "Ivan Nikolaev" <kurisu [@] rol.ru>


Hello, Sergey!
You wrote to Андрущенко \(Hордлинк\) on Sun, 15 Feb 2004 22:00:01 +0000
(UTC):

>> Хочу уменьшить дистрибутив моей прогри для Win95/98/ME/NT/2000/XP.

>> Сейчас я включаю в дистрибутив сл. файлы VBRun60:


>> asycfilt.dll comcat.dll comdlg32.ocx

SM> ^^^^^^^^^^^^

SM> Этот файл не входит в VBRun60. Если в проекте есть на него ссылка -

SM> значит, он нужен.


Где-то на vbrussian.com лежит класс, прекрасно реализующий функции
comdlg32.ocx через API. Только им и пользуюсь.

With best regards, Ivan Nikolaev


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

Re: Спрайты

Мы где-то виделись, Andrew?

15 Feb 04 10:53:19 в RU.VISUAL.BASIC Andrew Shelkovenko -> All:


AS> В Painte, можно вырезать кусок рисунка и таскать его без

AS> всяких торможений из-за перерисовки и т.п.

AS> Вот как это сделано?


Первое, что приходит на ум - BitBlt.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

Re: Спрайты

From: Martynov Sergey <sergmart [@] redwhitearmy.com>


Здравствуйте, Andrew.

Вы писали 15 февраля 2004 г., 10:53:19:

AS> Hello, All!


AS> В Painte, можно вырезать кусок рисунка и таскать его без

AS> всяких торможений из-за перерисовки и т.п.

AS> Вот как это сделано?


Эта штука называется "Image List"
в свое время пытался приблизиться к его скорости прорисовки функциями
BitBlt и пр., ничего не вышло - у меня моргало, а там нет, хотя битмап
раза в 4 больше (примерно 200 х 200 пикселей) по экрану таскал, и это
на P75 с видяхой S3 Trio.


--
С уважением,
Martynov Sergey
* Origin: Talk.Mail.Ru (2:5020/400)

Re: Спрайты

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


Hello, Dmitriy!
You wrote in conference fido7.ru.visual.basic to "Andrew Shelkovenko" <fido7.ru.visual.basic [@] talk.ru>to Andrew Shelkovenko on Mon,

16 Feb 2004 13:06:26 +0300:

AS>> В Painte, можно вырезать кусок рисунка и таскать его без

AS>> всяких торможений из-за перерисовки и т.п.

AS>> Вот как это сделано?

DK> Первое, что приходит на ум - BitBlt.

Второе, что приходит на ум - TransparentBlt


--
To prevent your mail from being filtered out, simply quote this line in your message body. A464E022
* Origin: Talk.Mail.Ru (2:5020/400)

Re: интимная связь VB и C

Мы где-то виделись, Dmitry?

15 Feb 04 12:24:28 в RU.VISUAL.BASIC Dmitry Sergunin -> мне:


DS> ... а, кста, ты, кажется, с полгода назад кидал в эху чё-то подобное

DS> (типа stdcall.dll или как-то так) --> она не это самое делает ?

DS> поподpобнее о её возможностях pасскажи, плз.


Я ее сейчас переписываю. Думаю, в ней будет следующее:

вызов функции по указателю (stdcall и cdecl), при этом можно описать
"прототип" этой функции через Declare (спасибо за совет Антону Лобастову);

создание переходника cdecl -> stdcall, с помощью которого можно в VB принимать

колбэковые вызовы от функций, требующих cdecl-колбэков.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

Re: очередной глупый вопрос про классы...

Мы где-то виделись, A.?

15 Feb 04 15:23:52 в RU.VISUAL.BASIC A. Skrobov -> мне:


DK>> Ты прав, свойства действительно медленнее паблик-переменных; по моим

DK>> оценкам, раза в три. Hо ты же знаешь, любая программа является

DK>> компромиссом между удобством и производительностью.

AS> Давай тестовый проект, посмотрим.


Сравнивались скорости обращения к переменным и свойствам для раннего (As
Class2) и для позднего (As Object и As Variant) связывания.

Итак, создайте Standard Exe Project1 с модулем:

============================== Смотри ниже ===============================
Option Explicit

Private Declare Function QueryPerformanceCounter Lib "kernel32" _
(lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" _
(lpFrequency As Currency) As Long

Sub Main()
Const n = 1024
Dim i&, r&, j&, o$

Dim av(1 To n) As Variant
Dim ad(1 To n) As Object
Dim ai(1 To n) As Class2

Dim s [@] , e [@] , f [@]
QueryPerformanceFrequency f

For i = 1 To n
Set ai(i) = New Class2
Set ad(i) = ai(i)
Set av(i) = ai(i)
Next i

QueryPerformanceCounter s
For i = 1 To n
With ai(i)
For j = 1 To 256
r = .A + .B + .C
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "Interface, variable: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With ai(i)
For j = 1 To 256
r = .PropertyA + .PropertyB + .PropertyC
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "Interface, property: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf & vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With ad(i)
For j = 1 To 256
r = .A + .B + .C
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "IDispatch, variable: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With ad(i)
For j = 1 To 256
r = .PropertyA + .PropertyB + .PropertyC
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "IDispatch, property: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf & vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With av(i)
For j = 1 To 256
r = .A + .B + .C
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "Variant, variable: " & vbTab & Format$((e - s) / f, "0.000") &
vbCrLf

QueryPerformanceCounter s
For i = 1 To n
With av(i)
For j = 1 To 256
r = .PropertyA + .PropertyB + .PropertyC
Next j
End With
Next i
QueryPerformanceCounter e
o = o & "Variant, property: " & vbTab & Format$((e - s) / f, "0.000")

MsgBox o
Open App.Path & "\results.txt" For Output As 1
Print #1, o
Close #1
End Sub
============================== Смотри выше ===============================

Потом добавьте проект ActiveX Dll Project2 с классом Class2:

============================== Смотри ниже ===============================
Option Explicit

Public A As Long
Public B As Long
Public C As Long

Private mA As Long
Private mB As Long
Private mC As Long

Public Property Get PropertyA() As Long
PropertyA = mA
End Property

Public Property Let PropertyA(ByVal v As Long)
mA = v
End Property

Public Property Get PropertyB() As Long
PropertyB = mB
End Property

Public Property Let PropertyB(ByVal v As Long)
mB = v
End Property

Public Property Get PropertyC() As Long
PropertyC = mC
End Property

Public Property Let PropertyC(ByVal v As Long)
mC = v
End Property
============================== Смотри выше ===============================

Добавьте Project2 в референсы первого проекта.

Итак, результаты получились следующими:

Запуск из IDE:

Interface, variable: 0,326
Interface, property: 1,534

IDispatch, variable: 29,501
IDispatch, property: 20,848

Variant, variable: 29,703
Variant, property: 21,250

Запуск откомпилированных проектов:

Interface, variable: 0,087
Interface, property: 0,284

IDispatch, variable: 31,395
IDispatch, property: 21,427

Variant, variable: 31,546
Variant, property: 21,530

Забавно, что в случае позднего связывания свойства оказались быстрее
переменных.

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

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)