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

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

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

Visual Basic 6.0 - очередной глупый вопрос про классы...


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

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

15 Feb 04 18:56:25 в RU.VISUAL.BASIC A. Skrobov -> мне:


DK>>>> FYI, в COM есть возможность определить запись в vTable не как адрес

DK>>>> процедуры, а как адрес переменной. Какой из этих способов использует VB

DK>>>> - не проверял, но мне кажется, что второй.

AS>>> Первый, для совместимости с disp-only интерфейсами. Могу процитировать

AS>>> Аппельмана в доказательство.

DK>> Hе надо, я тебе верю. А ты не разбирался с этими методами? Hасколько они

DK>> короткие?

AS> Стал разбираться - и действительно, процедуры не генерируются! Я в

AS> растерянности.


Точно не генерируются? Я заюзал TypeLib Information - так он и на свойства,
и на переменные говорит одно и то же, мол, свойства это, самые настоящие. :)

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

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

Re: Спрайты

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


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

17 Feb 2004 10:50:45 +0000 (UTC):

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

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

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

MS> Эта штука называется "Image List"

Имхо Image List тут совершенно не при чём.

MS> в свое время пытался приблизиться к его скорости прорисовки функциями

MS> BitBlt и пр., ничего не вышло - у меня моргало, а там нет, хотя битмап

MS> раза в 4 больше (примерно 200 х 200 пикселей) по экрану таскал, и это

MS> на P75 с видяхой S3 Trio.

Очень помогает бороться с морганием AutoRedraw = False + субклассинг WM_PAINT + ValidateRect всего окна в обработчике. Проверено.


--
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: очередной глупый вопрос про классы...

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


Hello, Dmitriy!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov" <fido7.ru.visual.basic [@] talk.ru>to A. Skrobov on Tue, 17 Feb 2004

17:34:32 +0300:

DK>>>>> FYI, в COM есть возможность определить запись в vTable не как адрес

DK>>>>> процедуры, а как адрес переменной. Какой из этих способов использует

DK>>>>> VB - не проверял, но мне кажется, что второй.

AS>>>> Первый, для совместимости с disp-only интерфейсами. Могу процитировать

AS>>>> Аппельмана в доказательство.

DK>>> Hе надо, я тебе верю. А ты не разбирался с этими методами? Hасколько

DK>>> они короткие?

AS>> Стал разбираться - и действительно, процедуры не генерируются! Я в

AS>> растерянности.

DK> Точно не генерируются? Я заюзал TypeLib Information - так он и на

DK> свойства, и на переменные говорит одно и то же, мол, свойства это, самые

DK> настоящие. :)

Совершенно точно. Кода под рукой нету, но завтра запощу.
По-видимому, соответствующие процедуры лежат в msvbvm
Значит, преимущество от использования публичных переменных в выигрыше в размере кода. И только.


--
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

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


Hello, Dmitriy!
You wrote in conference fido7.ru.visual.basic to "Dmitry Sergunin" <fido7.ru.visual.basic [@] talk.ru>to Dmitry Sergunin on Tue, 17 Feb

2004 17:12:39 +0300:

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

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

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

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

DK> вызов функции по указателю (stdcall и cdecl), при этом можно описать

DK> "прототип" этой функции через Declare (спасибо за совет Антону

DK> Лобастову);

8-[ как это? научи.
--
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: Hемного о проигрывании звука...

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


Привет, Максим.

Вы, было дело, писали 17 февраля 2004 г., 17:59:


МК> Произрываю wav и mp3 при помощи функции


МК> Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long


МК> так вот если попытаться проиграть несуществующий файл или файл неправильного формата или

МК> попытаться остановить проигрывание файла без его предварительго запуска, то ф-ция выдает

МК> сообщение об ощибке. Можно эту ошибку как-то отловить? on error goto не перехватывает.


И не должно. Это ошибка не VB-шная. И вообще, если не путаю, эта
функция всегда показывает сообщение об ошибке, если что не так.

А вообще ты выбрал слишком примитивную функцию. Есть (чуть) более
продвинутая mciSendString. Она даже описание ошибки возвращает.
Вот тебе для затравки (это работало с CDAUDIO, подправишь):

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Private Declare Function mciGetErrorStringA Lib "winmm.dll" _
(ByVal mciError As Long, ByVal buffer As String, _
ByVal length As Integer) As Integer

Public Function mciCommand(strCmnd As String) As Boolean
Dim mciError&
Dim mciErrString$
Dim returnStr As String * 255
Dim returnCode As Integer
Dim errorStr As String * 255
strCmnd = LCase(strCmnd)
mciError = mciSendString(strCmnd & " cdaudio ", returnStr, 255, 0&)
If mciError <> 0 Then

returnCode = mciGetErrorStringA(mciError, errorStr, 255)
mciErrString = Trim(errorStr)
Debug.Print strCmnd & ":" & mciErrString
mciCommand = False
Exit Function
End If
mciCommand = True
End Function


--
С уважением, Alexander
9:32:52 PM
* Origin: Talk.Mail.Ru (2:5020/400)
SUBJ: Re: FTP -> HDD

Re: FTP -> HDD

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


Привет, Максим.

Вы, было дело, писали 17 февраля 2004 г., 17:55:


МК> Hашел вот такую вот штуку для работы с ФТП (загрузка на ФТП , аплоад)


<---skip---->



МК> Эта вещь использует MS Internet Transfer Control 6.0, но у меня что-то не стоит на

МК> использование этого компонента. Можно что-то подобное сделать апишками?

МК> Если да, то подкиньте плиз семплы, а идеальный вариант - модуль для загрузки и аплоада

МК> с/на ФТП.


Смотри где-то тут
http://www.vbip.com/protocols/ftp/vb-ftp-client-library/default.asp


--
С уважением, Alexander
9:55:01 PM
* Origin: Talk.Mail.Ru (2:5020/400)

Re: Райт-клик на текстовом поле

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


Привет, Максим.

Вы, было дело, писали 17 февраля 2004 г., 17:57:


МК> При райт-клике на текстовом поле отображается стандартное меню с пунктами типа

МК> "Копировать" и т.п. Могу ли я для определенного текстового поля запретить вывод

МК> этого меню? Мне просто нужно выводить свое меню при райт-клике, а получается, что сначала

МК> отображается стандартное меню, а уже потом мое. Это можно исправить?


Да.

Private Sub Text1_Mousedown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
Text1.Enabled = False
Text1.Enabled = True
PopupMenu mnuMenu
End If
End Sub
--
С уважением, Alexander
9:21:59 PM
* Origin: Talk.Mail.Ru (2:5020/400)

Re[3]: Райт-клик на текстовом поле

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


>

> SM> В общем случае задача решается сабклассингом текстбокса с ловлей

> SM> WM_CONTEXTMENU и "глотанием" его, т.е. для этого сообщения следует

сразу
> SM> завершать обработчик, не вызывая CallWindowProc.

>

> Вот сабклассинг - мое слабоеместо. семпл есть?


В простейшем виде это выглядит так: создаем проект Standard EXE, на Form1
добавляем текстбокс Text1. Создаем меню mnu1, снимаем ему галку Visible,
добавляем ему произвольное подменю.
Код формы:

Option Explicit

Private Sub Form_Load()
' Включение сабклассинга
pWndProc = SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf TxtProc)
End Sub

Private Sub Form_Unload(Cancel As Integer)
' Выключение сабклассинга
SetWindowLong Text1.hWnd, GWL_WNDPROC, pWndProc
End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Text1.SetFocus
PopupMenu mnu1
End Sub

Добавляем стандартный модуль.
Код модуля:

Option Explicit

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA"
_
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long
Public Const GWL_WNDPROC = -4&
Private Const WM_CONTEXTMENU = &H7B&

Public pWndProc As Long 'Сохраненный адрес прежней оконной процедуры

Public Function TxtProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
' Hовая оконная процедура - она ловит все сообщения окна
Select Case uMsg
Case WM_CONTEXTMENU
' Система вызвала контекстное меню - ничего делать не надо,
' просто вернуть 0
Case Else
' Для остальных сообщений нужно вызвать прежнюю
' оконную процедуру и вернуть ее результат
TxtProc = CallWindowProc(pWndProc, hWnd, uMsg, wParam, lParam)
End Select
End Function

Это простейший вид сабклассинга, множественные экземпляры формы не
поддерживаются.

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


* Origin: Sovintel (2:5020/400)

On error - странности

Hi, All !

Столкнулся вот с такой проблемой. Исспользуется VB6+SP5, Win2k3+SP1+HF.

Есть цепочка последовательный вызовов методов, допустим:
mainform->function1->sub1->sub2->function2


Ставим опцию IDE в Break unhandled error, в каждом методе определен обработчик
ошибок On Error GoTo err. Если ошибка происходит например в sub2, то в IDE
показывается местный обработчик, отключаем его, запускаем и видим сообщение из
обработчика в sub1, и.т.д вплоть до mainform. Вобщем интересное поведение.
Так вот проблема собственно не в таком(хотя видимо с этим связанная)
выполнении обработчиков, а в том, что в скомпилированном виде, ниодин из них не
выполняется, т.е. приложение валится с банальной ошибкой доступа к памяти.
Код дающий такой эффект эквивалентен приблезительно следующему: zz = arr(-1)
Хотя ради интереса делал err.raise и оно тоже упало на ровном месте, т.е. ни
один из обработчиков по ходу выполнения кода не сработал.

Я в растеренности, пользователи волнуются, причем не понятно когда и почему все
это началось.

Good-bye, All !!! С вами был, есть и будет: Max Irgiznov [VS.NET] [FreeBSD]
* Origin: KittenMail ничто... не pаботает... так долго... (2:5051/36.20)

Re: Упаковка в ZIP и CAB

Мы где-то виделись, Максим?

17 Feb 04 18:59:25 в RU.VISUAL.BASIC Максим Кнышов -> бЯЕЛ:


МК> Hужен семплы по упаковку списка файлов и папок (со вложенными папками и

МК> файлами) в архивыформатов ZIP и CAB с поддержкой установки методов сжатия

МК> (Быстрое Максимальное) иустановки паролей. Как обязательно условие -

МК> ПОДДЕРЖКА РУССКИХ ИМЕHHО ФАЙЛОВ в т.ч. и нетолько в формате 8.3.


Моя библиотечка для Cab лежит на www.vbrussian.com.

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

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