|
|
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Отправляю сообщение из одного приложения в другое, если оба 32х битные, всё нормально, если оба 64, тоже без проблем. Если же разрядность разная - приходит хаотичный набор данных. Ну и первый вопрос, можно ли включить возможность при компиляции 64 разрядных приложений останавливаться на Брекпоинтах? Делфи их просто игнорирует. Второй вопрос, почему происходит ошибка передачи данных и как её избежать. Посылаю посредствам: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Принимаю: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 13:11 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичInteger(@copyDataStruct)) В 64-х разрядном приложении-то? Это называется "новичкам везёт". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 13:24 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Тут нужно понимать разницу между 32-битной ссылкой и 64-битной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 13:24 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Андрей ИгоревичInteger(@copyDataStruct)) В 64-х разрядном приложении-то? Это называется "новичкам везёт". Int64? wadman Тут нужно понимать разницу между 32-битной ссылкой и 64-битной. Я понимал ссылку как номер байта с которого начинаются данные в памяти? Это не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 13:38 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 13:38 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич Я понимал ссылку как номер байта с которого начинаются данные в памяти? Это не так? Разница в длине ссылки: 32 бита и 64. Отсюда и проблемы. Есть куча других вариантов передачи информации между приложениями. Пайпсы, файлы, сокеты и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 13:51 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
wadmanРазница в длине ссылки: 32 бита и 64. Отсюда и проблемы. Нет, проблемы не отсюда. Для WM_COPYDATA система честным образом копирует данные между адресными пространствами и, естественно, она использует указатели правильного размера. Проблема в том, что документацию не читают отдельно взятые личности. https://docs.microsoft.com/en-us/windows/win32/dataxchg/wm-copydata Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 14:19 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Андрей ИгоревичInt64? Ты не поверишь, но четвёртый параметр у SendMessage() должен иметь тип LPARAM. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 14:21 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
wadman Андрей Игоревич Я понимал ссылку как номер байта с которого начинаются данные в памяти? Это не так? Разница в длине ссылки: 32 бита и 64. Отсюда и проблемы. Есть куча других вариантов передачи информации между приложениями. Пайпсы, файлы, сокеты и т.п. Файл слишком медленно. А какой способ не слишком сложный и позволяет быстро и разово передавать десятки мегабайт данных? На вопрос зачем (очень уж часто его любят задавать), вот пример, каждое обновление - пересылка где-то 10 мб. Dimitry Sibiryakov Андрей ИгоревичInt64? Ты не поверишь, но четвёртый параметр у SendMessage() должен иметь тип LPARAM. Не понял https://docs.microsoft.com/en-us/windows/win32/dataxchg/wm-copydata A pointer to a COPYDATASTRUCT structure that contains the data to be passed. Ну Int64? Или вы что-то другое хотите сказать? Во всех примерах используют Integer или LongInt, ну я как-то подзабыл, что он 32 бита. Ну и смена данного параметра ничего не изменила, данные приходят неверные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 14:37 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 14:45 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, NativeInt или, как уже сказали LPARAM/WPARAM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 14:48 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич какой способ не слишком сложный и позволяет быстро и разово передавать десятки мегабайт данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 14:51 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
20.03.2020 14:51, vavan пишет: > не надо ничего передавать, если оба на одной машине. почитайте про mmf +100500 тем более, десятки мегабайт. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 14:53 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
vavan почитайте про mmf А потом придумайте, как это синхронизировать. С мьютексами познакомитесь и всё такое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 14:54 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Андрей Игоревич, NativeInt или, как уже сказали LPARAM/WPARAM. Код: pascal 1. 2. Вот такой код не работает. Точнее 32-32 и 64-64 работает, 32-64 нет. И ещё вопрос, одно из приложений при компиляции под 64 крашит Делфи с ошибкой "Disconnect session". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 14:55 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Пример во вложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 15:34 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич одно из приложений при компиляции под 64 крашит Делфи с ошибкой "Disconnect session" Скорее всего дебаггер отваливается. Штош. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 15:36 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Пример во вложении. Угу. Работает. Я, кажется, сообразил где у меня происходит рассинхрон. Код: pascal 1. в 32-битах равно 202440, а в 64 - 204432 Может ли в этих 8 байтах быть причина, и какая переменная меняет своё размер при смене разрядности? Data, в этом случае, выглядит так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 16:35 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 16:35 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
https://stackoverflow.com/questions/5616418/getting-64-bit-data-in-wm-copydata-command-instead-of-expected-32-bit-dword Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 16:39 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 16:43 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Kazantsev Alexey Андрей Игоревич, Код: pascal 1. 2. 3. Применю, но вообще причина была в этих двух строчках Код: pascal 1. 2. При смене их типа на Single - всё заработало и сообщения начали передаваться. Не знал что в 64-битах Extended меньше на 4 байта... Как-то и не задумывался в этом направлении искать. Спасибо большое за помощь. Проблема побеждена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 16:49 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
Андрей Игоревич, Кстати да, Extended в 32 и 64 битах это разные типы. Используй Double вместо него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 16:51 |
|
||
|
SendMessage и WM_COPYDATA между 32 и 64 разрядными приложениями.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2020, 22:06 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39939525&tid=2038464]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 388ms |

| 0 / 0 |
