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)