![]() |
Надо написать на Делфи процедуру, которой передается указатель на какой то массив и она его каким то образом обрабатывает. Т.е. процедура в другом юните и ей пофиг какой массив.
На паскале все получилось просто: какой то массив- ................. arr:Array[0..n] of Byte = (1,2,3,4,5...n); ................. в теле процедуры- ................. value[i]:=byte(ptr(Seg(arr),Ofs(arr))^); ................. Как такое закрутить на Делфи, привык блин к сегментно-оффсетной адресации под досом. Заранее всем спасибо. |
Kuper
Цитата:
Насколько я понял один из формальных параметров процедуры - что-то типа ..., p: Pointer, .... Тогда он принимает адрес какого-то массива. Ну, а доступ: value := Type(p^); :) |
Я как всегда не сказал самого главного
правильнее будет Код:
value[i]:=byte(ptr(Seg(arr),Ofs(arr)+[i])^); В процедуре Код:
value:=Byte(p^); [s]Исправлено: Kuper, 22:50 29-10-2003[/s] |
Kuper
Описать тип указателя на байт, преобразовать p к этому типу, плюс индекс и разыменовать.:) |
shurikan плиз код :confused:
|
Kuper
Код:
type Код:
var |
Цитата:
Код:
var |
Kuper
var * *Pbyte:^Byte; Именно это я и имел ввиду!!! Извини, синтаксис подзабыл. :( В основном я пишу на C и на ассемблере. *:) Добавлено: О, госсподи! Не var. Надо ввести новый тип!!! Можно написать так: (???) Код:
type |
Kuper
а ты то можешь мне растолковать все ПАСКАЛевские команды, а? :confused: :oszone: |
Alekssej
Мне надо написать процедуру, которой бы в качестве параметра передавался указатель на массив, для его дальнейшей обработки. Эта процедура должна содержаться в отдельном модуле. Вот код для TP Код:
..... Seg, Ofs - возвращают соответственно сегмент и смещение чего-нибудь; Byte - переопределяет тип той величины которую хотим считать, может быть от Byte до Extended (1-10 байт). Мне важно как раз смещение, т.к. я могу получить доступ к любому элементу массива. Как это сделать на Делфи ума не приложу. В модуле System среди "pointer and address routines" есть только Addr и Ptr. Неужели никто не знает как такое забадяжить? |
Kuper
См. выше. Не type *PByte = Pointer; Код:
..... |
shurikan
Огромное программерское спасибо! :up: |
Время: 11:29. |
Время: 11:29.
© OSzone.net 2001-