|
Указатели в 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
|