Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


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

Поиск:
В статье описываются функции библиотеки Visual Basic (msvbvm60.dll) для работы с указателями.

Поработав энное время с VB, начинаешь немного жалеть, что в нём нет того-то, или того-то, и потому приходится идти длинными обходными путями. Других достоинств языка это не умаляет, но всё же. Я вот порой думаю: как было бы здорово, если бы была встроенная работа с указателями, если бы можно было кастовать [1] lParam, если бы не нужна была CopyMemory... Но не может же откомпилированный экзешник обойтись без работы с указателями, думал я... Думал, думал... А потом решил внимательно посмотреть, какие функции экспортирует msvbvm60.dll [2] (потому что отвязаться от неё всё равно не получится, так может ещё что вытрясем). И нашёл массу интересного. После нескольких десятков крушений 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).

Ответ взят на: www.vbstreets.ru
Автор: Гергерт Сергей






Просмотров: 2988

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную