Функции для работы с указателями из msvbvm60


 главная
 обо мне
 языки
 веб-дизайн
 гитара
 блок-флейта
 ссылки
 фотоальбом
 литература
 разное
 анекдоты
 макраме
 общение
 обновления



http://www.uralweb.ru/

Раскрути свой сайт

поэтический сайт Веры Степановой




Указатели в VB6




По этой теме в инете громадное колличество статей, я взялся написать статейку только потому, что 
хочу по своему это объяснить.
В VB6 есть библиотечка msvbvm60 , можно сказать, это сердце VB6 . В этой библиотечке почти тысяча функций.
По непонятной причине, в VB6 не реализована работа с указателями. Хотя функция взятия адреса есть -
VarPtr(a) !!!
Но взять адрес мало, надо научиться читать то, что в этом адресе записано и уметь записать данные в 
нужный адрес. В msvbvm60 для этого есть всё необходимое. Для каждого типа переменной есть своя функция.
Начнём проект с декларации функций для записи и чтения по нужным адресам.

Private Declare Sub PutMem1 Lib "msvbvm60" (ByVal Addr As Long, ByVal NewVal As Byte)
Private Declare Sub PutMem2 Lib "msvbvm60" (ByVal Addr As Long, ByVal NewVal As Integer)
Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Addr As Long, ByVal NewVal As Long)
Private Declare Sub PutMem8 Lib "msvbvm60" (ByVal Addr As Long, ByVal NewVal As Currency)
Private Declare Sub GetMem1 Lib "msvbvm60" (ByVal Addr As Long, RetVal As Byte)
Private Declare Sub GetMem2 Lib "msvbvm60" (ByVal Addr As Long, RetVal As Integer)
Private Declare Sub GetMem4 Lib "msvbvm60" (ByVal Addr As Long, RetVal As Long)
Private Declare Sub GetMem8 Lib "msvbvm60" (ByVal Addr As Long, RetVal As Currency)
 
Как видим в названиях функий указанно колличество байт. То есть PutMem1 - записать число типа Byte ,
а PutMem4  типа Long !!!
Теперь на форму проекта киньте четыре лябеля и кнопку.
А теперь  объявим нужные переменные для нашей демки:

Dim s11, s22, s33, s44 As Variant
Dim a As Byte, b As Integer, c As Long, d As Currency

Теперь функция для кнопки, она выведет результаты работы демки:

Private Sub Command1_Click()
Label1.Caption = s11
Label2.Caption = s22
Label3.Caption = s33
Label4.Caption = s44
End Sub

А теперь и самое главное !:


Private Sub Form_Load()

По адресам переменных полученных функцией VarPtr записываем значения, обратите внимание, все переменные разных
типов и для них используются различные функции!!!

PutMem1 VarPtr(a), 105
PutMem2 VarPtr(b), 3892
PutMem4 VarPtr(c), 543543
PutMem8 VarPtr(d), 1054357675


А теперь прочитаем значения по адресам переменных. 

GetMem1 VarPtr(a), s11
GetMem2 VarPtr(b), s22
GetMem4 VarPtr(c), s33
GetMem8 VarPtr(d), s44

End Sub

 Как вможно заметить GetMem1 VarPtr(a), s11 абсолютно равносильно  s11 = a  ,
а PutMem1 VarPtr(a), 105 равносильно a = 105 ))) 
В реальной практике мне ни разу не довелось использовать указатели, работая в VB6 отлично и без них
можно обойтись. Но всё таки возможно в каких то очень редких случаях это может понадобиться  и 
самое главное, что такая возможность имеется ! 





© ЯКВ-мистери 2000-2014     kestrens@mail.ru

Hosted by uCoz