![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Корректно ли объявление аргумента как var Param: PByte?
Арлекино © (2015-12-08 05:34:00)Есть внешняя DLL, написанная на C++
Есть некая функция, один из параметров которой BYTE* &temp
Как нужно объявить переменную при вызове из Delphi?
temp: PByte - получаю Access Violation
var temp: PByte - срабатывает корректно, но кошерна ли такое объявление? возврат на указатель? ведь указатель и есть возврат.
Можно оставить декларацию без var и делать GetMem для переменной, но это ИМХО вообще изврат. Ведь так?
Юрий Зотов (2015-12-09 15:10:00) [1]Арлекино © (08.12.15 05:34)
>var temp: PByte- кошерна ли такое объявление?
Почему нет?
var temp: byte- кошерно? Вполне.
А почему тогда не кошерноvar temp: PByte?
Забудьте о том, что указатель - это какая-то особенная переменная. Никакая не особенная, а самая обыкновенная. Точно такая же, как, например, cardinal - беззнаковое целое число. И содержит указатель точно такое же беззнаковое целое число. Только число это надо рассматривать, как адрес - вот и вся разница.
var temp: byte- передали одно ЧИСЛО, получили другое ЧИСЛО.
var temp: PByte- передали один АДРЕС, получили другой АДРЕС.
Rouse_ (2015-12-08 19:05:00) [2]Это либо var tmp: PByte, либо tmp: PPByte (tmp: ^PByte)
Игорь Шевченко (2015-12-08 12:25:00) [3]
> BYTE* &temp
var temp: PBYTE;
icWasya (2015-12-08 09:24:00) [4]Объявление корректно. А далее надо читать доку по этой DLL-ке.
И если она возвращает указатель на какой-нибудь массив, не вздумайте делать FreeMem !