Главная arrow Статьи arrow Visual Basic arrow Функции VB для работы с указателями  
07.01.2009 г.
Программирование на Visual Basic 6/.NET/VBA/VBScript: исходники, коды, статьи
Совет
Хотите быстро заработать на своем сайте? Попробуйте это!
Функции VB для работы с указателями

Поработав энное время с VB, начинаешь немного жалеть, что в нём нет того-то, или того-то, и потому приходится идти длинными обходными путями. Других достоинств языка это не умаляет, но всё же. Я вот порой думаю: как было бы здорово, если бы была встроенная работа с указателями, если бы можно было кастовать1 lParam, если бы не нужна была CopyMemory... Но не может же откомпилированный экзешник обойтись без работы с указателями, думал я... Думал, думал... А потом решил внимательно посмотреть, какие функции экспортирует msvbvm60.dll2 (потому что отвязаться от неё всё равно не получится, так может ещё что вытрясем). И нашёл массу интересного. После нескольких десятков крушений IDE разобрался с назначением некоторого количества функций (продолжаю разбираться с остальными, IDE рушится с завидным постоянством ).
    Вот они, самые важные из изученных и понятых.

Public Declare Function GetMem2 Lib "msvbvm60" (ByVal pSrc As Long, ByVal pDst As Long) _
As Long
Public Declare Function GetMem4 Lib "msvbvm60" (ByVal pSrc As Long, ByVal pDst As Long) _
As Long
Public Declare Function GetMem8 Lib "msvbvm60" (ByVal pQWORDSrc As Long, ByVal pQWORDDst _
As Long) As Long
Эта группа функций ожидает два указателя: куда копировать и откуда копировать. Сишный эквивалент:
int __stdcall GetMem4 (int* src, int* dst)
{
*dst = *src;
return 0;
}

    Копирование производится с максимальной для процессора эффективностью. Никаких проверок правильности аргументов, а значит, максимальная скорость. Правда, если передадите неверный указатель, то всё рухнет

Public Declare Function PutMem2 Lib "msvbvm60" (ByVal pDst As Long, ByVal NewValue As Long) _
As Long
Public Declare Function PutMem4 Lib "msvbvm60" (ByVal pDst As Long, ByVal NewValue As Long) _
As Long
Public Declare Function PutMem8 Lib "msvbvm60" (ByVal pQWORDDst As Long, _
ByVal NewValueLowDWORD As Long, ByVal NewValueHighDWORD As Long) As Long

Эти функции получают указатель на место назначения и абсолютное значение, которое туда нужно записать. Сишный эквивалент:

int __stdcall PutMem4 (int* dst, int NewValue)
{
*dst = NewValue;
return 0;
}

    Ничуть не менее эффективно.
    Есть ещё несколько функций, которые я не стал здесь рассматривать - например, GetMemStr сотоварищи. Её действие абсолютно эквивалентно простому присваиванию str1 = str2.
Эти 6 функций дают нам, фактически, прямую работу с указателями (включая арифметику), эффективность которой очень близко приближается к низкоуровневым языкам. Так что заводим себе модуль modMSVBVM и включаем его во все проекты
 


1 От английского to cast. (прим. редактора).
2 Основная библиотека функций Visual Basic (msvbvm60.dll от Microsoft Visual Basic Runtime 6.0 Dynamic Link Library)
.

Автор: Гергерт Сергей
Источник: http://www.vbstreets.ru/

 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:
Жирный Курсив Подчеркнутый Ссылка Список Цитата

Защитный код
Обновить

« Пред.   След. »
Добавить в закладки
 
 
Авторизация
Читайте еще
Лучшие файлы
Значок файла Руководство по Visual Basic 6 (72440)
(Справочники)

Значок файла VBProject (42238)
(Справочники)

Значок файла Создание приложений ОС Windows (32839)
(Справочники)

Значок файла Visual Basic с нуля (29306)
(Справочники)

Значок файла Алгоритмы Visual Basic (25910)
(Справочники)

Значок файла Азбука Visual Basic (25380)
(Справочники)

Значок файла MegaFlash VBHELP (22429)
(Справочники)

Новые файлы
Анекдот
IDDQD IDDQD!- неистово кричал doom`er глядя на летевший со всей скорости
на него КАМАЗ. "Как же хорошо что я уже IDCLIP"- снова подумал думер
пройдя сквозь грузовик.. живым
IP адрес
Ваш IP адрес: 38.103.63.55 (38.103.63.55)