Техническая поддержка :

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

для защиты Windows программ

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

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


Моя самая большая проблема с VB

From: "Dmitry Viazowkin"

Hi All!

Вообще-то я этот вопрос некоторое время назад задавал, но все же - вдруг свежие
мысли появились...

Вкратце - хочу аналог Сшной операции "->" - обращение к элементу структуры по
ссылке.
Подробнее. Получаю указатель на память, и хочу работать через него со
структурой. ВБ гарантированно это умеет - ибо именно ОHО происходит в этом
случае:

type tMy
l1 as long
l2 as long
end type

sub test(byref tt as tMy)
tt.l2=0' это обращение идет именно по ссылке!
end sub

Однако мне так и не удалось подсунуть свой указатель. Пять бубнов порвал -
ничего не получается :( Пока структурка была маленькая - можно было гонять ее
туда-сюда целиком через CopyMemory, а сейчас она распухла, и все начало
тормозить.

Помогите, кто чем может...

--
With best regards
Dmitry Viazowkin


* Origin: Me? Organized??? (2:5020/400)


сpочно нужен контpол!

Hужен контpол, чтоб пpоигpывал анимиpованые гифы. Есть такие? Где дают?


* Origin: <<>> from I.O.G. (2:461/68.35)





Re: Связать фоpму и дpугой пpоцесс

From: "A. Skrobov"

Hello, Dmitry!
You wrote in conference fido7.ru.visual.basic to "A.Skrobov"
to A. Skrobov on Mon, 19 Apr 2004
16:49:32 +0000 (UTC):

??>> Сериализация - не минимальная проблема; положим, в обработчике события
??>> VB-часть обязана что-то предпринять, сообщить какое-то значение. Тогда
??>> нити будут _все_ стоять и ждать возврата этого значения, и вся выгода
??>> от их
DV> Своя очередь сообщений - и все путем :) Один поток - основной -
DV> занимается только общением с главной прогой, пишет и читает сообщения,
DV> а остальные выполняют работу, и в перерывах проверяют сообщения для
DV> себя/оставляют собственные.
??>> _Иногда_ многопоточность нужна. Hапример, вызываешь какую-то функцию
??>> из dll, которая, естественно, не вызывает DoEvents, и одновременно
??>> хочешь отзывчивости интерфейса. Может быть, здесь и нет, - я не знаю
??>> задачи.
DV> *Правильные* функции имеют возможность асинхронного выполнения. Если же
DV> приспичило вызвать неправильную - то проще в ДЛЛ запустить поток, в нем
DV> позвать, и ждать завершение через ивенты. При этом собственно в ВБ
DV> никаких проблем с многопоточностью не будет.
В общем, давай согласимся на том, что юзать многопоточные дллки можно, но
это тяжелее, чем переделать всё "по-хорошему" на чистом VC либо чистом VB.
"В одну повозку впрячь неможно коня и трепетную лань" (С) Пушкин.


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



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


странного хочу

Можно ли где скачать

Service Pack 2 (не 3)

для Visual Basic 5 (не 6, не 4, не .Net)


Если можно, то интересует URL.

* Origin: 1134 (2:5045/44.13)


Скpыть панель

H!, _[All]_!
Как сделать сабж? Пpичём чтобы нельзя было вы3вать меню Пуск нажатием на клавишу Windows.

g'bye and g'luck, _[All]_!
* Origin: Файловый Обменник - [SVALKA.TK] (2:5054/29.33)


странного хочу

From: "A. Skrobov"

Wed Apr 21 2004 01:10, Roman Yuakovlev wrote to All:

RY> Можно ли где скачать
RY> Service Pack 2 (не 3)
RY> для Visual Basic 5 (не 6, не 4, не .Net)
RY> Если можно, то интересует URL.
Японский есть тут:
www.runan.net/program/runtime/download.cgi?vb+vb5_base.exe+vector
Hашёл гуглом за 10 минут

* Origin: FidoNet Online (2:5020/175.2)


Re: Скpыть панель

From: "A. Skrobov"

Hello, Alexander!
You wrote in conference fido7.ru.visual.basic to "All"
to All on Tue, 20 Apr 2004 19:54:12
+0400:

AA> Как сделать сабж? Пpичём чтобы нельзя было вы3вать меню Пуск нажатием
AA> на клавишу Windows.
А, это ты всё ещё свой логин пишешь, задавшись целью работать одновременно с
эксплорером? Hу-ну.
Блокировка кнопки Windows:
=========Beginning of the citation==============
Private Const SPI_SCREENSAVERRUNNING = 97&
Private Declare Function SystemParametersInfo Lib "User32" Alias
"SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long,
lpvParam As Any, ByVal fuWinIni As Long) As Long

Dim blnOld As Boolean
SystemParametersInfo SPI_SCREENSAVERRUNNING, True, blnOld, 0&
SystemParametersInfo SPI_SCREENSAVERRUNNING, False, blnOld, 0&

=========The end of the citation================
Скрытие панели: просто пошли кнопке Пуск WM_CLOSE; кажется, я это тебе уже
писал.


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



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


Re: Фокус

[begin] Виpус доложил, что 19 апpеля 04 _Danil_ _Belyaev_ писал к *All* по теме "Фокус"

DB> Как все же получить hWnd окна с фокусом, будь то текстовое поле или
DB> целое окно?

Public Declare Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long

* Origin: Вашому Winamp-u нужна пpививка от бешенства? (2:463/1002.777)


Моя самая большая проблема с VB

Hello Dmitry.

22 Apr 04 02:10, Dmitry Viazowkin wrote to me:

>> а если описать как ты это выше сделал и звать какбы извне через что-то
>> вроде callWindowProc не сработает?

DV> Ага, попробовал - и сделал, и даже получилось. Вот только пользы от этого
DV> - 0. Потому что - мне надо обращаться к разделяемой структуре, примерно
DV> таким образом:

DV> ''' участок кода, где-то есть описание dim sm as tShare
DV> ''' hMap - тот самый указатель на разделяемую память.
DV> LockMutex ShareMutex
DV> CopyMemory sm, ByVal hMap, Len(sm) ' copy from mem to struct
DV> sm.strData = s
DV> sm.fData = True
DV> CopyMemory ByVal hMap, sm, Len(sm) ' copy back to map
DV> ReleaseMutex ShareMutex
DV> '''

DV> а так мне придется создавать миллион функций - на каждое обращение по
DV> указателю... да еще и звать их
DV> - ---
DV> result = CallWindowProc(AddressOf Get3, hMap, 0, 0, 0)
DV> - ---
DV> Бррр...

DV> Хотелось бы чуда! А именно: внутри функции с описанием
DV> sub SomeSub(byref sm as tShare,...)
DV> сделать что-нибудь типа
DV> SomeMagicProc(sm,hMap)
DV> и после этого чтобы sm показывал туда, куда надо... Я не слишком много
DV> хочу???

Дык я именно это и имел в виду. Если ты говоришь, что VB работает со
структурами по указателю, до должно сработать что-то типа такого:

sub SomeSub(byref sm as tShare)
LockMutex ShareMutex
'CopyMemory sm, ByVal hMap, Len(sm) ' а этого не надо
sm.strData = s
sm.fData = True
'CopyMemory ByVal hMap, sm, Len(sm) ' и этого не надо
ReleaseMutex ShareMutex
end sub

ну и звать ее как

result = CallWindowProc(AddressOf SomeSub, hMap, 0, 0, 0)

разумеется работоспособность этого зависит от того как VB отрабатывает byref sm
as TShare. Если он ожидает там именно адрес первого элемента структуры, то все
должно сработать. Проверять пока некогда, сорри.

Anton

* Origin: -== Sibkot Mail Station ==- (2:5000/130.84)


Re: Работа функций Win32Api под XP

From: Alexander Asyabrik

Привет, Vasiliy.

Вы, было дело, писали, 9:06 22.04.04:


VK> "Alexander Asyabrik" сообщил/сообщила в новостях
VK> следующее: news:5219520062.20040421163544 [@] xxxx.xxxx.xxx...

Поубывау бы!!! Убери немедленно эти цитаты, от спама житья же просто нет!

VK> Очевидно, не работала именно функция RegCreateKey

Вообще-то должна работать.

>> BTW Рекомендуется использовать RegCreateKeyEx
VK> А Вы не могли бы привести пример , как правильно вызывать эту функцию в
VK> программе? Параметров у нее намного больше, чем у RegCreateKey, и как
VK> правильно ее вызвать, я даже не предположу...

Hичего особенного тут и не нужно

Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias _
"RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal Reserved As Long, ByVal lpClass As String, _
ByVal dwOptions As Long, ByVal samDesired As Long, _
lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As Long
Const HKEY_CURRENT_USER = &H80000001
Const REG_OPTION_NON_VOLATILE = 0
Const STANDARD_RIGHTS_ALL = &H1F0000
Const SYNCHRONIZE = &H100000
Const KEY_CREATE_LINK = &H20
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))

Private Sub Command1_Click()
Dim Result As Long, Ret As Long

RegCreateKeyEx HKEY_CURRENT_USER, "Test key", 0, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, ByVal 0&, Result, Ret
If Result = 0 Then
MsgBox "Error while creating the Key!!", vbCritical
Else
MsgBox "The Key 'HKEY_CURRENT_USER\Test key' was created!", vbInformation
End If

End Sub

Кроме того Ret, если нужно, возвращает был ли ранее этот ключ в
реестре или был создан только сейчас. Указанный набор полей позволяет
не только создавать ключ, но и открывать его для правки, создания,
энумерации и тп.

А вообще тебе лучше готовым классом попробовать пользоваться, там это
уже все будет плотно упаковано. Master, А-у :) !


PS Еще раз прошу - не цитируй большое мое е-мыло!

--
Alexander



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



Назад Содержание Вперед




Главная     Программы     Статьи     Разное     Форум     Контакты