Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Вниз

Чтение из середины   Найти похожие ветки 

 
Dib@zol   (2007-06-21 15:07) [0]

Привет всем. Подскажите, как реализовать алгоритм, всё утро бился :((

Есть пойнтер, указывающий на блок данных, размер которого известен. Дано смещение, в байтах, относительно начала блока. Дана структура, в которую нужно прочитать [размер_структуры] байт, начиная с байта смещения. Как это сделать?


 
tesseract ©   (2007-06-21 15:12) [1]


> начиная с байта смещения. Как это сделать?


mypointer:=Pointer(cardinal(oldpointer)+смещение) мож получиться.


 
Однокамушкин   (2007-06-21 15:13) [2]

Если P - указатель, D - смещение, а S - переменная нужной структуры, то так:
Move((PChar(P) + D)^, S, SizeOf(S));


 
Dib@zol   (2007-06-21 15:20) [3]

ПАСИБА!!!!! Вопрос закрыт :)


 
Однокамушкин   (2007-06-21 15:23) [4]


> Dib@zol   (21.06.07 15:20) [3]
> Вопрос закрыт :)

Не, ещё не закрыт! :))) Вот когда придёт модератор, тогда вопрос действительно будет закрыт как не относящийся к тематике WinAPI :))))


 
Dimaxx ©   (2007-06-21 16:58) [5]

Можно эффективнее. Допустим, есть переменная-запись MyRec, содержимое которой и нужно получить. Адрес буфера в переменной P типа pointer. Смещение равно к примеру $AC.

var
 A: PByte;
 MyRec: TMyRec;
 P: pointer;
...
 A:=P;
 Inc(A,$AC);
...


и все. Теперь даже не копируя никуда структуру из буфера можем обращаться к ее полям через TMyRec(A^).


 
SpellCaster   (2007-06-22 11:02) [6]

> [5] Dimaxx ©   (21.06.07 16:58)

А вот так еще лучше:

var
p,p1: PMyRec;
...
p1:=P;
Inc(p1,sizeof(TmyRec));
...
p1^.somefield:=...


 
KSergey ©   (2007-06-22 13:26) [7]

> SpellCaster   (22.06.07 11:02) [6]
> var
> p,p1: PMyRec;
> ...
> p1:=P;
> Inc(p1,sizeof(TmyRec));
> ...
> p1^.somefield:=...

Нет, вы пытаетесь обмануть.
Если сделать Inc(p1,sizeof(TmyRec)) - то сместимся на sizeof(TmyRec)*sizeof(TmyRec) байт. Что явно не то, что мы хотели.
Да и "крышечка" в p1^.somefield для дельфей - не обязательна.


 
SpellCaster   (2007-06-26 10:36) [8]

> [7] KSergey ©   (22.06.07 13:26)

Да, пардон.
Конечно же, просто Inc(p1);


 
Однокамушкин   (2007-06-26 10:45) [9]


> KSergey ©   (22.06.07 13:26) [7]
> Нет, вы пытаетесь обмануть.

Нет, там другая ошибка... нигде не сказано, что смещение от p должно быть равно или кратно размеру структуры... если p указывает не на массив TMyRec, а менее регулярную структуру, то смещение может оказаться любым...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.043 c
2-1182932640
ОН
2007-06-27 12:24
2007.07.22
Создание таблицы в Access


2-1182614540
cossak
2007-06-23 20:02
2007.07.22
переменная баг d7?


2-1182882228
Chaval'
2007-06-26 22:23
2007.07.22
ListView


9-1156658491
Fiery
2006-08-27 10:01
2007.07.22
GLScene


2-1182965649
mc0808
2007-06-27 21:34
2007.07.22
Программа не запускается на машине без Дельфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский