|
не работает ping x64
|
|||
---|---|---|---|
#18+
Привет всем, ниже описанный код прекрасно работает в x32, но в x64 при ping ('test') в локальной сети в процедуре function PingIp(Address: RawByteString): Boolean; в строке error := GetLastError(); значение error=87 и соответственно дальше не отрабатывает Подскажите плиз, что не так? Код: 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 18:34 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
SergeyKNP, из-за смены битности поплыли размеры указателей и структур. внимательно см msdn, там есть нужные примечания еще тут почитай https://stackoverflow.com/questions/51087679/winapi-icmpsendecho-on-64-bit-platform ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 18:59 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Siemargl из-за смены битности поплыли размеры указателей и структур. внимательно см msdn, там есть нужные примечания еще тут почитай https://stackoverflow.com/questions/51087679/winapi-icmpsendecho-on-64-bit-platform читал...но нельзя ли поправить сам код который я привёл? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 19:10 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Пробежал глазами. Первое, что бросилось в глаза - packed. Его нужно убрать ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 19:22 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
было IcmpSendEcho(hIP, DestAddress.S_addr, @pingBuffer, sizeof(pingBuffer), Nil, pIpe, sizeof(icmp_echo_reply) + sizeof(pingBuffer), 10); поправил на ...добавил +8 IcmpSendEcho(hIP, DestAddress.S_addr, @pingBuffer, sizeof(pingBuffer), Nil, pIpe, sizeof(icmp_echo_reply) + sizeof(pingBuffer)+8, 10); теперь работает ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 19:42 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
_Vasilisk_ Пробежал глазами. Первое, что бросилось в глаза - packed. Его нужно убрать Разработчиков API, работающих с хрен-знает-как выравненными структурами нужно убивать на месте а не поощрять. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 19:47 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис, может предложишь свой вариант КОНКРЕТНОГО кода? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 19:51 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
_Vasilisk_ Пробежал глазами. Первое, что бросилось в глаза - packed. Его нужно убрать SergeyKNP, не мучайся, проcто используй Indy ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 20:08 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
SergeyKNP Siemargl из-за смены битности поплыли размеры указателей и структур. внимательно см msdn, там есть нужные примечания еще тут почитай https://stackoverflow.com/questions/51087679/winapi-icmpsendecho-on-64-bit-platform читал...но нельзя ли поправить сам код который я привёл? Можно. Правь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 20:54 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
SergeyKNP Подскажите плиз, что не так? Убери packed ; ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 21:11 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
"Siemargl, Можно. Правь." особо одарённые, такие как ты, пусть не возбуждаются и идут лесом. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2022, 23:35 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
asutp2 ты предлагаешь отдать на откуп компилятору и директиве выравнивания расположение полей в рекорде?)))) Код: pascal 1.
и оно же, о чудо!, совпадает с дефолтным значением. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 01:53 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис работающих с хрен-знает-как выравненными структурами Код: pascal 1.
но packed - это полный бред ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 01:58 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
_Vasilisk_ asutp2 ты предлагаешь отдать на откуп компилятору и директиве выравнивания расположение полей в рекорде?)))) Код: pascal 1.
и оно же, о чудо!, совпадает с дефолтным значением. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 02:30 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Это легко проверяется чтением их объявления в заголовках SDK. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 03:07 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Это легко проверяется чтением их объявления в заголовках SDK. Вот пример структуры, которая в Win64 требует именно $ALIGN 4 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 04:13 |
|
не работает ping x64
|
|||
---|---|---|---|
#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.
Давай навскидку: что будет выведено? _Vasilisk_ но packed - это полный бред ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 10:28 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Когда требуется конкретное выравнивание задавайте его руками. О чём копья ломать... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 11:51 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
На самом деле выравнивание структур существенно только когда их размер меньше разрядности регистров, чтобы операции присваивания за один такт выполнялись. Кратность адреса в плане быстродействия дает прирост в копейки. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 12:02 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис Давай навскидку: что будет выведено? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 13:41 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Kazantsev Alexey Код: pascal 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 13:42 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
_Vasilisk_ Соколинский Борис Давай навскидку: что будет выведено? Код: plaintext 1. 2.
Т.е. "default 8" на поверку оказывается совсем не default и логика выравнивания весьма неоднозначная. И когда предлагается поверить, что неизвестно какой компилятор библиотеки использует такую же, нормальный ответ будет - "не надо выпендрежей, используйте packed record и #pragma pack(1) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 13:53 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис Бред - это использовать в межмодульных коммуникациях структуры переменного размера. Код: 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.
p.s. Почитал по своей же ссылке, пишут, что для 64 бит надо использовать вот такую структуру: https://docs.microsoft.com/en-us/windows/win32/api/ipexport/ns-ipexport-icmp_echo_reply32 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 13:55 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Выравнивание размера структуры и выравнивание её полей это как бы две разные вещи. Попробуйте sizeof от массива TByteRecord для пущей занимательности. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 13:59 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
_Vasilisk_ Это официальный синтаксис? Первый раз такое вижу Ну, как сказать... В доке такого нет, но в исходниках встречается со времён XE2. Даже FPC в режиме совместимости с дельфями это поддерживает. Начиная с Сиэтла (10.0) появился ещё и атрибут [Align(N)]. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 14:04 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис "не надо выпендрежей, используйте packed record и #pragma pack(1) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 14:06 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Попробуйте sizeof от массива TByteRecord для пущей занимательности. Кстати, для этого есть packed array :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 14:09 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Kazantsev Alexey но в исходниках встречается ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 14:10 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Kazantsev Alexey Даже FPC в режиме совместимости с дельфями это поддерживает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 14:11 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
_Vasilisk_Кстати, у Майкрософт в большинстве случаев packed/не packed не влияет, т.к. они добавляют reserved поля для правильного выравнивания. Меньшинство тоже бьёт больно. Я как-то по глупости объявлял packed NumericStruct для ODBC... С тех пор при портировании обязательным шагом является тестовая утилита, сверяющая размеры и смещения каждого поля каждой структуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 14:23 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Вот мне любопытно есть какой-нибудь пример, когда выравнивание структур > 8 байт повышает быстродействие хотя бы на 10%? А если нет - нафига вообще это выравнивание понадобилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 14:46 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис нафига вообще это выравнивание понадобилось? https://community.intel.com/t5/Software-Tuning-Performance/Why-should-data-be-aligned-to-16-bytes-for-SSE-instructions/td-p/1164004 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 15:09 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис Вот мне любопытно есть какой-нибудь пример, когда выравнивание структур > 8 байт повышает быстродействие хотя бы на 10%? А если нет - нафига вообще это выравнивание понадобилось? https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Internal_Data_Formats_(Delphi)#Record_Types ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 15:27 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Kazantsev Alexey Соколинский Борис нафига вообще это выравнивание понадобилось? https://community.intel.com/t5/Software-Tuning-Performance/Why-should-data-be-aligned-to-16-bytes-for-SSE-instructions/td-p/1164004 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 16:02 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
s62 Речь шла о packed/unpacked записях. Packed/unpacked - это же про выравнивание полей внутри записи. В плане передачи параметров к внешним библиотекам - дополнительный аргумент к использованию packed. Вопрос об эффективности выравнивания остается в силе. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 16:04 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис Насколько я знаю, SIMD до сих пор не реализован в pas-компиляторе, только через встроенный asm. Можно считать что к дельфовому коду это не относится. Даже если закрыть глаза на то что встроенный ассемблер эти инструкции понимает, данные могут передаваться внешним обработчикам. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 16:17 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Kazantsev Alexey, Если внешнему обработчику необходимы каким-то образом выровненные данные - он и должен задекларировать их должным образом в виде packed record с явно указанными резервными байтами. Аналогично в случае SIMD-ов, которые используются в лучшем случае в 1:100000 кодов. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 16:24 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис Если внешнему обработчику необходимы каким-то образом выровненные данные - он и должен задекларировать их должным образом в виде packed record с явно указанными резервными байтами. Он должен лишь требования о выравнивании обозначить, а подготовить данные это забота приложения. Соколинский Борис Аналогично в случае SIMD-ов, которые используются в лучшем случае в 1:100000 кодов. Ну ведь используются же... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 17:04 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Kazantsev Alexey Он должен лишь требования о выравнивании обозначить, а подготовить данные это забота приложения. Kazantsev Alexey Ну ведь используются же... Явно не тот случай когда в штатный компилятор нужно автоматически выравнивание добавлять. Я все еще жажду увидеть пример дельфового кода, где выравнивание адресов/размеров структур увеличивает быстродействие хотя бы на 5%. Любой, даже алгоритмически бессмысленный. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 17:16 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис Ну OK, в случае необходимости SSE можно также явно резервные байты прописать. Явно не тот случай когда в штатный компилятор нужно автоматически выравнивание добавлять. Там нужно, в другом месте нужно... Ну так рутину автоматизировать нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 17:37 |
|
не работает ping x64
|
|||
---|---|---|---|
#18+
Соколинский Борис Я все еще жажду увидеть пример дельфового кода, где выравнивание адресов/размеров структур увеличивает быстродействие хотя бы на 5%. Код: 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. 43. 44. 45. 46. 47. 48. 49.
Но вопрос не в этом. Да сейчас возможно (и даже наиболее вероятно) это не имеет никакого смысла. Как и всякие соглашения о вызовах (которые в x64 привели все к единому виду). Но это то наследие, с которым приходится работать ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2022, 17:45 |
|
|
start [/forum/topic.php?all=1&fid=58&tid=2036683]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 301ms |
total: | 454ms |
0 / 0 |