![]() |
eXeL@B —› Программирование —› Как в Delphi переменной присвоить определённый адрес ячейки что-бы иметь к ней постоянный доступ? |
Посл.ответ | Сообщение |
|
Создано: 13 июня 2009 14:12 · Личное сообщение · #1 Как в Delphi присвоить переменной адрес ячейки что-бы иметь к ней постоянный доступ? Например некое значение (один байт) лежит по адресу $404012. Я могу его читать и писать подобным образом: byte(pointer($404012)^):=$10; либо x:=byte(pointer($404012)^); В подобном случае происходит постоянное чтение и конвертация, да и это не наглядно. Другое дело если объявить переменную например Х размером в байт, но так, что-бы её адрес в памяти фактически оказался нужным мне, а не тем, что выделит дельфи. Тогда делая if X=$12... всё будет происходить очень просто и в Х всегда будет свежее значение... Как такое реализовать? ![]() |
|
Создано: 13 июня 2009 14:24 · Личное сообщение · #2 |
|
Создано: 13 июня 2009 14:36 · Личное сообщение · #3 |
|
Создано: 13 июня 2009 16:03 · Поправил: BoRoV · Личное сообщение · #4 |
|
Создано: 13 июня 2009 17:18 · Поправил: ToBad · Личное сообщение · #5 Простите, что не корректно описал проблему. Сообщение OKOB в точности иллюстрирует то, чего хочу добиться: Var X: Byte absolute $404012; У меня Дельфи7, пока не разобрался как заставить работать эту конструкцию. Ошибку выдаёт: "Variable name expected" указывая на адрес. На данный момент получилось сделать только так, как посоветовал BoRoV: Var X:PByte; X:=pointer($404012); Далее пишем и читаем так: X^:=$12; a:=X^; Конечно вариант с absolute был бы вообще идеален... Буду гуглить. ![]() |
|
Создано: 13 июня 2009 17:30 · Поправил: ToBad · Личное сообщение · #6 Нашёл такой код: var BiosDate: array[0..7] of char absolute $FFFF5; PCType: byte absolute $FFFFE; procedure TForm1.FormCreate(Sender: TObject); var S: string; begin case PCType of $FC: S := 'AT'; $FD: S := 'PCjr'; $FE: S := 'XT =8-O'; $FF: S := 'PC'; else S := 'Нестандартный'; end; Caption := 'Дата BIOS: ' + BiosDate + ' Тип ПК: ' + S; end; Всё равно при компиляции ругается на адрес. Может какая-то директива компилятора нужна? ![]() |
|
Создано: 13 июня 2009 18:36 · Личное сообщение · #7 |
|
Создано: 13 июня 2009 18:53 · Личное сообщение · #8 |
|
Создано: 13 июня 2009 19:32 · Личное сообщение · #9 tihiy_grom пишет: поройся вот тут Порылся, указать конкретный адрес не удается. Absolute почему-то принимает только имя переменной, но никак не конкретный адрес как в примере. -= ALEX =- пишет: откуда у программиста может возникнуть такая задача знать точный адрес переменной? Например обращаться из dll к переменным вызывающей программы, обмен данными и т.д. Мало ли ещё где пригодится... ![]() |
|
Создано: 13 июня 2009 20:08 · Личное сообщение · #10 |
|
Создано: 13 июня 2009 20:44 · Личное сообщение · #11 tihiy_grom не пойму тогда этот код, на чём его компилировали? Может есть директива компилятора какая-то хитрая... var BiosDate: array[0..7] of char absolute $FFFF5; PCType: byte absolute $FFFFE; procedure TForm1.FormCreate(Sender: TObject); var S: string; begin case PCType of $FC: S := 'AT'; $FD: S := 'PCjr'; $FE: S := 'XT =8-O'; $FF: S := 'PC'; else S := 'Нестандартный'; end; Caption := 'Дата BIOS: ' + BiosDate + ' Тип ПК: ' + S; end; ![]() |
|
Создано: 13 июня 2009 21:08 · Личное сообщение · #12 |
|
Создано: 13 июня 2009 22:09 · Личное сообщение · #13 |
|
Создано: 13 июня 2009 22:22 · Личное сообщение · #14 |
|
Создано: 13 июня 2009 23:14 · Личное сообщение · #15 |
|
Создано: 14 июня 2009 09:53 · Личное сообщение · #16 |
|
Создано: 08 сентября 2009 14:05 · Личное сообщение · #17 |
|
Создано: 08 сентября 2009 15:05 · Личное сообщение · #18 |
![]() |
eXeL@B —› Программирование —› Как в Delphi переменной присвоить определённый адрес ячейки что-бы иметь к ней постоянный доступ? |
Эта тема закрыта. Ответы больше не принимаются. |