'1. Функции передачи данных.
Private Declare Sub CopyBytes Lib "MSVBVM60.DLL" Alias "__vbaCopyBytes" (ByVal
Size As Long, Dest As Any, Source As Any)
'Аналогично RtlMoveMemory, но только для неперекрывающихся блоков
Private Declare Sub CopyBytesZero Lib "MSVBVM60.DLL" Alias "__vbaCopyBytesZero"
(ByVal Size As Long, Dest As Any, Source As Any)
'То же, прич?м после копирования обнуляются Size байт источника
Private Declare Function GetLong Lib "MSVBVM60.DLL" Alias "VarPtr" (ByVal Value
As Long) As Long
'Возвращает переданное значение (полезно для тайпкастов)
Private Declare Sub CopyByte Lib "MSVBVM60.DLL" Alias "GetMem1" (ByVal Source As
Long, Dest As Byte)
Private Declare Sub CopyInteger Lib "MSVBVM60.DLL" Alias "GetMem2" (ByVal Source
As Long, Dest As Integer)
Private Declare Sub CopyLong Lib "MSVBVM60.DLL" Alias "GetMem4" (ByVal Source As
Long, Dest As Long)
Private Declare Sub CopyCurrency Lib "MSVBVM60.DLL" Alias "GetMem8" (ByVal
Source As Long, Dest As Currency)
'Работают как PEEK: передают значение из памяти в переменную
Private Declare Sub CopyObject Lib "MSVBVM60.DLL" Alias "GetMemObj" (ByVal
Source As Long, Dest As Object)
'То же, прич?м корректно работает со сч?тчиками ссылок объектов
Private Declare Sub CopyString Lib "MSVBVM60.DLL" Alias "GetMemStr" (ByVal
Source As Long, Dest As String)
'То же, прич?м корректно освобождает/выделяет память
Private Declare Sub CopyVariant Lib "MSVBVM60.DLL" Alias "GetMemVar" (ByVal
Source As Long, Dest As Variant)
'Объединение двух предудущих вариантов
Private Declare Sub StoreByte Lib "MSVBVM60.DLL" Alias "PutMem1" (ByVal Dest As
Long, ByVal Value As Byte)
Private Declare Sub StoreInteger Lib "MSVBVM60.DLL" Alias "PutMem2" (ByVal Dest
As Long, ByVal Value As Integer)
Private Declare Sub StoreLong Lib "MSVBVM60.DLL" Alias "PutMem4" (ByVal Dest As
Long, ByVal Value As Long)
Private Declare Sub StoreCurrency Lib "MSVBVM60.DLL" Alias "PutMem8" (ByVal Dest
As Long, ByVal Value As Currency)
'Работают как POKE: передают значение в память
Private Declare Sub StoreObject Lib "MSVBVM60.DLL" Alias "SetMemObj" (ByVal Dest
As Long, ByVal Value As Object)
Private Declare Sub StoreVariantObject Lib "MSVBVM60.DLL" Alias "SetMemVar"
(ByVal Dest As Long, ByVal Value As Variant)
'То же, прич?м корректно работают со сч?тчиками ссылок объектов
Private Declare Sub StoreString Lib "MSVBVM60.DLL" Alias "PutMemStr" (ByVal Dest
As Long, ByVal lpOleStr As Long)
Private Declare Sub StoreVariantNotObject Lib "MSVBVM60.DLL" Alias "PutMemVar"
(ByVal Dest As Long, ByVal Value As Variant)
'То же, прич?м корректно освобождают/выделяют память
'2. Функции работы с SAFEARRAY-ями.
Private Declare Sub ArrayRebase1 Lib "MSVBVM60.DLL" Alias "__vbaAryRebase1Var"
(Ary As Variant)
'Изменяет нижнюю границу массива на 1
'Аналогично ReDim Preserve Ary(1 To UBound(Ary) - LBound(Ary) + 1), но быстрее
Private Declare Function AryPtr Lib "MSVBVM60.DLL" Alias "VarPtr" (Ary() As
Long) As Long
'Возвращает указатель на lpSAFEARRAY
'Пример использования:
'Dim v(), lpSAFEARRAY As Long
' v() = Array("First", "Second", "Last")
' CopyLong AryPtr(v()), lpSAFEARRAY
Private Declare Function ArrayAddress Lib "MSVBVM60.DLL" Alias "__vbaRefVarAry"
(Ary As Variant) As Long
'Возвращает указатель на lpSAFEARRAY
'Пример использования:
'Dim v, lpSAFEARRAY As Long
' v = Array("First", "Second", "Last")
' CopyLong ArrayAddress(v), lpSAFEARRAY
Private Declare Function ElementAddress Lib "MSVBVM60.DLL" Alias
"__vbaDerefAry1" (ByVal lpsaAry As Long, ByVal Index0 As Long) As Long
'Возвращает адрес элемента SAFEARRAY-я (элементы индексируются с 0)
'Пример использования:
' Debug.Print ElementAddress(lpSAFEARRAY, 0)
Private Declare Function vbaLBound Lib "MSVBVM60.DLL" Alias "__vbaLbound" (ByVal
Dimension As Integer, ByVal lpsaAry As Long) As Long
Private Declare Function vbaUBound Lib "MSVBVM60.DLL" Alias "__vbaUbound" (ByVal
Dimension As Integer, ByVal lpsaAry As Long) As Long
'Возвращают нижнюю и верхнюю границы любого измерения SAFEARRAY-я
'Пример использования:
' Debug.Print vbaLBound(1, lpSAFEARRAY)
' Debug.Print vbaUBound(1, lpSAFEARRAY)
'3. Другие функции.
Private Declare Function HalfPrevDWord Lib "MSVBVM60.DLL" Alias "__vbaLenBstr"
(ByVal Address As Long) As Long
'Возвращает половину двойного слова [Address - 4] (может, кому-то пригодится)
Private Declare Sub AddRef Lib "MSVBVM60.DLL" Alias "__vbaObjAddref" (ByVal Obj
As Object)
'Увеличивает сч?тчик ссылок объекта
P.S. На диске с ВБ6 лежит файл MSVBVM60.DBG. Какую пользу млжно извлечь из его
наличия?
P.P.S Кто-нибудь знает, что делает функция Zombie_Release? Уж больно название
красивое.
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru