| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > как правильно получить значение по адресу, |
| Автор: Coder 11.4.2007, 17:00 | ||||
есть DLL (Delphi) и основная программа (VC++). Из DLL идет передача указателя на структуру:
в VC ловим это сообщение:
*** - вот здесь проблемы - как правильно скопировать то что находится по адресу wParam в переменную xy? перепробывал несколько вариантов, но ничего не получается. P.S. адрес передается правильный - проверенно в отладчиках. |
| Автор: ama_kid 11.4.2007, 17:11 |
| Чот не понял, как соотносится TWpt и Txy, но примерно так: ... Txy *xy; ... xy = (Txy *)wParam; |
| Автор: Coder 11.4.2007, 17:25 |
| извиняюсь, я ошибся когда писал. TWpt = Txy xy = (Txy *)wParam; - не работает. я такой код уже проверял. |
| Автор: Daevaorn 11.4.2007, 17:28 |
и видимо не только там. давай нормалный свой кой, так будет продуктивней |
| Автор: ama_kid 11.4.2007, 17:29 |
| а xy у тебя объявлен объектом или указателем на объект? Txy *xy; |
| Автор: Coder 11.4.2007, 17:35 | ||||
| ama_kid, как указатель (когда по твоему варианту). вот нормальный код (у меня на часах 1:30 ночи - причина ошибок):
|
| Автор: Daevaorn 11.4.2007, 17:42 |
ок что не работает и как? код корректный |
| Автор: Coder 11.4.2007, 17:48 |
| получаю сообщение SET_XY, смотрю значение xy.x и xy.y в отладчике - там нули (они остаются после очистки ZeroMemory), хотя я в DLL пишу отличные от нуля цифры. |
| Автор: fantast 11.4.2007, 17:49 |
а это нормально что ты адрес преобразовывал в integer, я ващето паскаль тока в школе проходил и то до указателей дело не дошло, но мне кажется что в любом случае байт для адреса не хватит после такого преобразования. |
| Автор: Coder 11.4.2007, 17:57 |
| Integer - 4 байта, тут все нормально. для уверенности пробовал Cardinal (это безнаковый Integer) |
| Автор: ama_kid 11.4.2007, 18:07 |
| Coder Хм... Погоди-ка... Вообще-то для передачи данных существует специальное сообщение WM_COPYDATA. У Dll - своя область памяти, у приложения - своя, они вообще-то не пересекаются... А если DLL скомпилена с включенной галкой Built With Runtime Libraries - тогда точно труба... Ты адрес-то передаешь, но этот адрес валиден только в самой длл. Как приложени должно вытаскивать эти данные из сегмента данных DLL? Ты эту область расшарил? Используй WM_COPYDATA, если тебе надо передавать какие-то данные... А в твоем случае я бы использовать wParam = x, lParam =y... |
| Автор: fantast 11.4.2007, 18:19 |
| дело говорит |
| Автор: Coder 12.4.2007, 00:44 |
| ama_kid, попробую. но вот так wParam = x, lParam =y... не получится - у меня больше данных это всего лишь пример |
| Автор: HappyLife 12.4.2007, 13:05 |
| ama_kid, При включенное галке, Built With Runtime Libraries область памяти одна. |