|
|
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
alekcvp _Vasilisk_ Смотри на первые три поля. В сумме 4 байта и все само пакуется А ты вообще понимаешь что такое выравнивание? Если ты эту структуру в Delphi опишешь, то у тебя будет так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. То что закомментировано добавит компилятор. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2021, 20:30 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov alekcvpЕсли ты эту структуру в Delphi опишешь, то у тебя будет так: Нет, так будет только у asutp2 и ему подобных, которые употребляют опции выравнивания где не надо. Да, реально, я почему-то думал что он каждое поле будет выравнивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2021, 20:30 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov alekcvpЕсли ты эту структуру в Delphi опишешь, то у тебя будет так: Нет, так будет только у asutp2 и ему подобных, которые употребляют опции выравнивания где не надо. Не, ты что реально что ли настолько тупой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 01:16 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Я реально портировал более чем достаточно структур с Си на Дельфи чтобы знать о чём говорю. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 01:25 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
И поэтому ты видимо считаешь, что только один в теме, а все остальные - тупни? Я выше уже приводил пример работы с API (а именно с RAS), где для работы со структурой rasconn требуется именно {$ALIGN 4}, а для всех остальных структуру требуется {$ALIGN 8}. Хотя о чем это я, гуру ведь говорит иначе!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 01:55 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
asutp2 И поэтому ты видимо считаешь, что только один в теме, а все остальные - тупни? Я выше уже приводил пример работы с API (а именно с RAS), где для работы со структурой rasconn требуется именно {$ALIGN 4}, а для всех остальных структуру требуется {$ALIGN 8}. Хотя о чем это я, гуру ведь говорит иначе!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 13:18 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Ничего подобного. В WinApi структуры упакованы сами по себе. Там все поля либо четырехбайтовые, либо появляются всякие reserved. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 13:28 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
asutp2Хотя о чем это я, /гуру/ ведь говорит иначе!) А теперь подыми глаза повыше и перечитай что именно говорит гуру. Повторяю медленно: при любых непонятках со структурами надо первым делом сравнивать размеры и смещения каждого их поля. И общий размер структуры тоже если она используется в массиве. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 13:45 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Barlone asutp2 И поэтому ты видимо считаешь, что только один в теме, а все остальные - тупни? Я выше уже приводил пример работы с API (а именно с RAS), где для работы со структурой rasconn требуется именно {$ALIGN 4}, а для всех остальных структуру требуется {$ALIGN 8}. Хотя о чем это я, гуру ведь говорит иначе!) Dimitry Sibiryakov asutp2Хотя о чем это я, /гуру/ ведь говорит иначе!) А теперь подыми глаза повыше и перечитай что именно говорит гуру. Повторяю медленно: при любых непонятках со структурами надо первым делом сравнивать размеры и смещения каждого их поля. И общий размер структуры тоже если она используется в массиве. ок, смотрим выше твое же сообщение Dimitry Sibiryakov alekcvpЕсли ты эту структуру в Delphi опишешь, то у тебя будет так: Нет, так будет только у asutp2 и ему подобных, которые употребляют опции выравнивания где не надо. Так ты уже определись наконец, что делать ПОСЛЕ того, как определены расхождения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 14:19 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
asutp2Так ты уже определись наконец, что делать ПОСЛЕ того, как определены расхождения? ПОСЛЕ - аккуратно применять опции выравнивания если они нужны. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 14:36 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
asutp2 Я использовал например RasConnStatus, RasEapInfo, RasDialParams, RasEntryName, RasEntry, RasDialExtensions, RasStats - они и для x32 и для x64 корректно работают при {$ALIGN 8} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 14:39 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Повторяю медленно: при любых непонятках со структурами надо первым делом сравнивать размеры и смещения каждого их поля. И общий размер структуры тоже если она используется в массиве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 14:43 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Бывают конечно казусы. Например, в какой-то старой версии delphi TGUID был описан как packed record. Вот тогда в одном месте пришлось действительно проверять смещение каждого поля. Кода исправили, не знаю, но сейчас в 10.2 packed для TGUID уже нет. И выравнивается он теперь как положено - на 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 14:53 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Barloneобычно проще в исходник посмотреть. ....а там в объявлении макросы на typedef-ы и пока дойдёшь до настоящего типа, состаришься. Проще тестовую программку на экран размером сляпать. А уж если кто-то применил тип long, так вообще начинается самая забава... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 15:09 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Barlone asutp2 Я использовал например RasConnStatus, RasEapInfo, RasDialParams, RasEntryName, RasEntry, RasDialExtensions, RasStats - они и для x32 и для x64 корректно работают при {$ALIGN 8} Dimitry Sibiryakov asutp2Так ты уже определись наконец, что делать ПОСЛЕ того, как определены расхождения? ПОСЛЕ - аккуратно применять опции выравнивания если они нужны. в данной конкретной ситуации нужны и поэтому используются. Продолжить мысль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 15:15 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
asutp2Лично у меня в проектах для виндов по умолчанию именно $ALIGN 8, а не 4, для macos - $ALIGN 16 asutp2в данной конкретной ситуации нужны и поэтому используются. Продолжайте мысль. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 15:33 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
asutp2 Эмба рекомендует использовать {$ALIGN 8}, поэтому такое выравнивание и используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 16:55 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Barlone asutp2 Эмба рекомендует использовать {$ALIGN 8}, поэтому такое выравнивание и используется. Dimitry Sibiryakov asutp2Лично у меня в проектах для виндов по умолчанию именно $ALIGN 8, а не 4, для macos - $ALIGN 16 asutp2в данной конкретной ситуации нужны и поэтому используются. Продолжайте мысль. Я вообще не улавливаю смысла претензии. Поясните. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 17:22 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Barlone Например, в какой-то старой версии delphi TGUID был описан как packed record. Вот тогда в одном месте пришлось действительно проверять смещение каждого поля. Кода исправили, не знаю, но сейчас в 10.2 packed для TGUID уже нет. И выравнивается он теперь как положено - на 4. Кровавые подробности? Так-то полям TGUID выравнивание не требуется. (у поля D3 смещение - 6, например). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 17:45 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Barlone Например, в какой-то старой версии delphi TGUID был описан как packed record. Вот тогда в одном месте пришлось действительно проверять смещение каждого поля. Кода исправили, не знаю, но сейчас в 10.2 packed для TGUID уже нет. И выравнивается он теперь как положено - на 4. Кровавые подробности? Так-то полям TGUID выравнивание не требуется. (у поля D3 смещение - 6, например). На С есть Код: plaintext 1. 2. 3. 4. И тут у нас 2 байта паддинга между a и b. Транслируем на паскаль, и b прилепляется к a, несмотря на {$ALIGN 4}, потому что у packed record собственное выравнивание 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 18:25 |
|
||
|
Не получить корректный Record по указателю из С++ DLL
|
|||
|---|---|---|---|
|
#18+
Barlone, Но packed оно о внутренней компоновке полей записи, а не о самой записи в составе другого типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2021, 18:36 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40036116&tid=2037703]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
180ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 554ms |

| 0 / 0 |
