|
|
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
Есть такая запись Код: pascal 1. 2. 3. 4. Хочу в константах получить смещения полей. Пишу Код: pascal 1. 2. 3. 4. 5. PA объявляется. При объявлении PB получаю ошибку[dcc32 Error] E2026 Constant expression expected Как-то можно извернуться? Ручное вычисление смещения пока не рассматриваю С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 19:49 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
Немного ошибся. В коде так Код: pascal 1. 2. но ошибка та же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 19:52 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
Смешение у такой структуры будет ровна предыдущим элементам. Что означает, что самый главный адрес указывает на первый элемент A. Для получения второго элемента NativeUInt(Address) + SizeOf(Boolean) от первого элемента Boolean ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 20:04 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоСмешение у такой структуры будет ровна предыдущим элементам.+ выравнивание . Именно поэтому_Vasilisk_Ручное вычисление смещения пока не рассматриваю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 20:08 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
Пока получилось так Код: pascal 1. 2. 3. 4. Объявление типизированных констант обязательно. Ну а в коде уже от этих констант отнимаю базовый адрес @CMyRec ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 20:13 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Есть такая запись Код: pascal 1. 2. 3. 4. Хочу в константах получить смещения полей. Пишу Код: pascal 1. 2. 3. 4. 5. PA объявляется. При объявлении PB получаю ошибку[dcc32 Error] E2026 Constant expression expected Как-то можно извернуться? Ручное вычисление смещения пока не рассматриваю никак, только вручную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 20:15 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Именно у той структуры, которую ты привёл - не будет никакого выравнивания. Потому как ты не упомянул в ней packed А ошибка в твоём случае именно потому, что ты у nil данных пытаешься прочитать адреса по смещению (где никак таких данных нет) Т.е, что бы узнать смещения, а оно как я напомню, начинается от главного адреса, нам надо произвести такой банальный код Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 22:10 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
А вот у упакованной структуры, смещения будут такие Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 22:12 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
ГирлионайльдоА ошибка в твоём случае именно потому, что ты у nil данных пытаешься прочитать адреса по смещению (где никак таких данных нет) Няшка, жги!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 22:21 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо_Vasilisk_, Именно у той структуры, которую ты привёл - не будет никакого выравнивания. Потому как ты не упомянул в ней packed смещения будут в любом случае, packed или не packed но ты жги, да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 22:44 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Что так? такая жёсткая экономия памяти? Будет кода больше imho Сделай integer и работай с маской а не с запясью. И совместимость и переносимость выше again-imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 23:43 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
defecatorГирлионайльдо_Vasilisk_, Именно у той структуры, которую ты привёл - не будет никакого выравнивания. Потому как ты не упомянул в ней packed смещения будут в любом случае, packed или не packed но ты жги, да Он про выравнивание, а не про смещение. Гирлионайльдо, ты прав с точночтью до наоборот. Отличие record от record packed: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. TRecPack - SizeOf = 5 байт, TRec - SizeOf = ХЗ байт, как компилятор на душу положит, как раз из-за выравнивания адресов для процессора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 06:49 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
GatorЧто так? такая жёсткая экономия памяти?Нет. Пишу для структуры простенький сериализатор/десериализатор. Не хочется что-то забыть при будущем добавлении полей. А так адреса забил в константный массив и отдаю его сериализатору. RTTI тут использовать не к месту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 14:54 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
Для тех, кто любит грабли, мазохизм и прочую экзотику: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 15:22 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Пишу для структуры простенький сериализатор/десериализатор. Не хочется что-то забыть при будущем добавлении полей. А так адреса забил в константный массив и отдаю его сериализатору. RTTI тут использовать не к месту Как мне кажется, RTTI именно для таких случаев уместно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 15:41 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_GatorЧто так? такая жёсткая экономия памяти?Нет. Пишу для структуры простенький сериализатор/десериализатор. Не хочется что-то забыть при будущем добавлении полей. А так адреса забил в константный массив и отдаю его сериализатору. RTTI тут использовать не к местуМне кажется, тут не RTTI, а оргмеры нужны. Представь, если не совпадают версии исходной структуры и и вайла со смещениями (описания) структуры. Ясен пень смещения могут лететь. Даже если поля постоянной длины и есть условия. В свое время делали разбор тикетов и писали на сях UDF (User Definition Format) Там исходный тикет содержал бинарные переменной длины поля, флаги, или размеры, версии и прочую мутотень. UDF (INIфайл по сути - xml тогда не было) содержал описание каждого поля, условия и прочую нужную фигню. Даже COMMENT= был ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 01:00 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
Чтобы не забыть поменять код при добавлении полей, можно использовать такое: Код: pascal 1. Я такое местами делаю в enum-ах, если на них завязаны какие-то еще данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 11:02 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Как-то можно извернуться? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 01:14 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
rtticycle Код: pascal 1. Так и я могу. В вопросе речь шла о record. А он классовых конструкторов не умеет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 14:26 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_В вопросе речь шла о record. А он классовых конструкторов не умеет Умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 14:37 |
|
||
|
Смещение поля записи в константы
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyУмеет.Прикольно! Не знал. Тогда вопрос снят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 14:39 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39708561&tid=2040344]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 457ms |

| 0 / 0 |
