Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу получить значение из структуры 
:(
    Опции темы
Baa
Дата 7.10.2002, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 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
PM ICQ   Вверх
Chingachguk
Дата 7.10.2002, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Поставь SoftIce и в нем все увидишь ;)

Ну на крайняк выведи дебаг принт на свои параметры(адреса).


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Baa
Дата 7.10.2002, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Гы %) я вчера с отладчиком просидел довольно долго... А так и не понял че за нафиг... У меня приходит либо какой-то мутный адрес, либо вообще 0...


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Chingachguk
Дата 7.10.2002, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Ну так блин ;) Ты же глянь - видимо, ты неверно ему что-то передаешь - от точки вызова: вот у меня то в стек сунолось, сё... Точки вызова твоей CanMove... Проследи... до входа в нее. как тама она фрейм оформляет и т.п.

Собственно, посмотреть вызов в кодах можно в той среде, где ты ее вызываешь. В дельфи ? Насчет него не знаю, но VC все классно видно ...


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Baa
Дата 7.10.2002, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Чего-то я туплю :) ща всё быстренько в MVS сделаю :) а потом уж на дельфи не проблема перейти.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Baa
Дата 7.10.2002, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 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
PM ICQ   Вверх
Baa
Дата 7.10.2002, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



А с lpPoint.y такого не прокатило... т.е. передается какой-то маразм... огромное число... скорее всего это адрес... во ток на что.. да и почему..


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Chingachguk
Дата 8.10.2002, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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.
PM MAIL ICQ   Вверх
Baa
Дата 8.10.2002, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 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
PM ICQ   Вверх
Chingachguk
Дата 8.10.2002, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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.
PM MAIL ICQ   Вверх
Baa
Дата 8.10.2002, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 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
PM ICQ   Вверх
Chingachguk
Дата 8.10.2002, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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.
PM MAIL ICQ   Вверх
Baa
Дата 8.10.2002, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Все равно андефайнд


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Baa
Дата 8.10.2002, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 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
PM ICQ   Вверх
Baa
Дата 8.10.2002, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Кстати, вот и вся процедурка... нельзя ли её как-нить оптимизировать...
Код

CanMove proc lpMatrix: LPDWORD, lpPoint: POINT
   mov eax, lpPoint.x
   mov ebx, 5
   imul ebx
   mov ebx, lpPoint.y
   add eax, ebx
   mov ebx, 4
   imul ebx
   mov esi, eax
   mov eax, lpMatrix
   mov eax, dword ptr [eax][esi]
   test eax, eax
   jz Can
     xor eax, eax
     ret
   Can:
     mov eax, 1
     ret
CanMove endp



--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0828 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.