![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Coder |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
есть DLL (Delphi) и основная программа (VC++). Из DLL идет передача указателя на структуру:
в VC ловим это сообщение:
*** - вот здесь проблемы - как правильно скопировать то что находится по адресу wParam в переменную xy? перепробывал несколько вариантов, но ничего не получается. P.S. адрес передается правильный - проверенно в отладчиках. |
||||
|
|||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 2 Всего: 95 |
Чот не понял, как соотносится TWpt и Txy, но примерно так:
... Txy *xy; ... xy = (Txy *)wParam; -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
извиняюсь, я ошибся когда писал. TWpt = Txy
xy = (Txy *)wParam; - не работает. я такой код уже проверял. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 2 Всего: 95 |
а xy у тебя объявлен объектом или указателем на объект?
Txy *xy; -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| Coder |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
ama_kid, как указатель (когда по твоему варианту).
вот нормальный код (у меня на часах 1:30 ночи - причина ошибок):
Это сообщение отредактировал(а) Coder - 11.4.2007, 17:38 |
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
получаю сообщение SET_XY, смотрю значение xy.x и xy.y в отладчике - там нули (они остаются после очистки ZeroMemory), хотя я в DLL пишу отличные от нуля цифры.
|
|||
|
||||
| fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: 2 Всего: 2 |
а это нормально что ты адрес преобразовывал в integer, я ващето паскаль тока в школе проходил и то до указателей дело не дошло, но мне кажется что в любом случае байт для адреса не хватит после такого преобразования. --------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
Integer - 4 байта, тут все нормально. для уверенности пробовал Cardinal (это безнаковый Integer)
|
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 2 Всего: 95 |
Coder
Хм... Погоди-ка... Вообще-то для передачи данных существует специальное сообщение WM_COPYDATA. У Dll - своя область памяти, у приложения - своя, они вообще-то не пересекаются... А если DLL скомпилена с включенной галкой Built With Runtime Libraries - тогда точно труба... Ты адрес-то передаешь, но этот адрес валиден только в самой длл. Как приложени должно вытаскивать эти данные из сегмента данных DLL? Ты эту область расшарил? Используй WM_COPYDATA, если тебе надо передавать какие-то данные... А в твоем случае я бы использовать wParam = x, lParam =y... -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: 2 Всего: 2 |
дело говорит
--------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
ama_kid, попробую.
но вот так wParam = x, lParam =y... не получится - у меня больше данных это всего лишь пример |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
ama_kid,
При включенное галке, Built With Runtime Libraries область памяти одна. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |