![]() |
|
|
![]()
|
|
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Предположим, что у нас есть такой код...
CanMove proc lpMatrix: LPVOID, lpPoint: POINT ; тут мы много чего делаем ret CanMove endp И вот это экспортная функция в дллке... Сначала вылетала ошибка, при работе с матрицей... Думал индексация идет левая... Оказалось, что я не могу получить нормально значения из структуры... Вопрос: как это сделать? :\ Описана эта функция из Дельфи примерно так: CanMove = function (Field: Pointer;var p:TPoint): Boolean; stdcall; -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Поставь SoftIce и в нем все увидишь ;)
Ну на крайняк выведи дебаг принт на свои параметры(адреса). -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Гы %) я вчера с отладчиком просидел довольно долго... А так и не понял че за нафиг... У меня приходит либо какой-то мутный адрес, либо вообще 0...
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Ну так блин ;) Ты же глянь - видимо, ты неверно ему что-то передаешь - от точки вызова: вот у меня то в стек сунолось, сё... Точки вызова твоей CanMove... Проследи... до входа в нее. как тама она фрейм оформляет и т.п.
Собственно, посмотреть вызов в кодах можно в той среде, где ты ее вызываешь. В дельфи ? Насчет него не знаю, но VC все классно видно ... -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Чего-то я туплю
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
А ларчик просто открывался... Еще раз убеждаюсь, что возится с подобноыми вещами до 6 утра вредно... Ща сел, подумал и сразу все нормально заработало
Оказалось, что я запутался с адресами... Вобщем, если кому интересно, то получить значение в eax можно так: CanMove proc lpMatrix: LPVOID, lpPoint: POINT mov ebx, dword ptr [lpPoint].x mov eax, [ebx] -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
А с lpPoint.y такого не прокатило... т.е. передается какой-то маразм... огромное число... скорее всего это адрес... во ток на что.. да и почему..
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Ну, как-то все завуалировано. Мне больше любо:
CanMove proc lpMatrix: LPVOID, lpPoint: POINT mov eax,lpPoint ; Фактически, [ebp+что-то там] или [esp+...] mov eax,[eax].y -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Я тоже так хотел... но не катит..
tstdll.asm(82) : error A2070: invalid instruction operands tstdll.asm(83) : error A2006: undefined symbol : y -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
А вот так можно записать:
lea eax,lpPoint mov eax,[eax] mov eax,POINT[eax].y ? -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Пофиг... грит, что не знает никаких y
tstdll.asm(84) : error A2006: undefined symbol : y -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
А lea eax,lpPoint прокатило ?
Попробуй что-ли: lea eax,POINT[eax].y -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Все равно андефайнд
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Мда... я нашел как обойти этот глюк... причина тоже вроде бы ясна, хотя может я и ошибаюсь.. смотрим, что у нас происходит...
Мы передаем в функцию адрес на структуру... А функция ожидает не адрес, а саму структуру... В итоге получается муть... решилось передачей структуры на прямую. CanMove = function (Field: Pointer; p:TPoint): Integer; stdcall; CanMove proc iField: LPVOID, lpPoint: POINT mov eax, lpPoint.y -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Кстати, вот и вся процедурка... нельзя ли её как-нить оптимизировать...
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |