| Функции VB для работы с указателями |
|
Поработав энное время с VB, начинаешь немного жалеть, что в нём нет того-то, или того-то, и потому приходится идти длинными обходными путями. Других достоинств языка это не умаляет, но всё же. Я вот порой думаю: как было бы здорово, если бы была встроенная работа с указателями, если бы можно было кастовать1 lParam, если бы не нужна была CopyMemory... Но не может же откомпилированный экзешник обойтись без работы с указателями, думал я... Думал, думал... А потом решил внимательно посмотреть, какие функции экспортирует msvbvm60.dll2 (потому что отвязаться от неё всё равно не получится, так может ещё что вытрясем). И нашёл массу интересного. После нескольких десятков крушений IDE разобрался с назначением некоторого количества функций (продолжаю разбираться с остальными, IDE рушится с завидным постоянством Public Declare Function GetMem2 Lib "msvbvm60" (ByVal pSrc As Long, ByVal pDst As Long) _Эта группа функций ожидает два указателя: куда копировать и откуда копировать. Сишный эквивалент: int __stdcall GetMem4 (int* src, int* dst) Копирование производится с максимальной для процессора эффективностью. Никаких проверок правильности аргументов, а значит, максимальная скорость. Правда, если передадите неверный указатель, то всё рухнет Public Declare Function PutMem2 Lib "msvbvm60" (ByVal pDst As Long, ByVal NewValue As Long) _ Эти функции получают указатель на место назначения и абсолютное значение, которое туда нужно записать. Сишный эквивалент: int __stdcall PutMem4 (int* dst, int NewValue) Ничуть не менее эффективно. 1 От английского to cast. (прим. редактора). Автор: Гергерт Сергей |
| « Пред. | След. » |
|---|


