Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2011, 15:20   #11
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Но все-же подробно тут не расписано... Я имел введу как точно вызвать __thiscall в дельфи...

Цитата:
а чего вы взяли что у вас метод то?
Именно с этого...
Код:
.text:004FFA50     CPed__GiveWeapon proc near              ; CODE XREF: sub_4069D0+2F7p
.text:004FFA50                                             ; sub_429910+124p ...
.text:004FFA50
.text:004FFA50     var_1C          = dword ptr -1Ch
.text:004FFA50     var_14          = dword ptr -14h
.text:004FFA50     arg_0           = dword ptr  4
.text:004FFA50     arg_4           = dword ptr  8
.text:004FFA50
.text:004FFA50 000                 push    ebx
.text:004FFA51 004                 push    esi
.text:004FFA52 008                 push    edi
.text:004FFA53 00C                 push    ebp
.text:004FFA54 010                 sub     esp, 10h
.text:004FFA57 020                 mov     ebp, [esp+20h+arg_0]
.text:004FFA5B 020                 push    ebp
.text:004FFA5C 024                 mov     esi, ecx
.text:004FFA5E 024                 call    sub_5D5730
.text:004FFA63 024                 pop     ecx
.text:004FFA64 020                 mov     ecx, [eax+60h]
.text:004FFA67 020                 mov     ebx, ecx
.text:004FFA69 020                 mov     [esp+20h+var_14], ecx
.text:004FFA6D 020                 lea     ebx, ds:0[ebx*8]
.text:004FFA74 020                 lea     ebx, [ebx+ebx*2]
.text:004FFA77 020                 mov     eax, [esi+ebx+408h]
.text:004FFA7E 020                 cmp     eax, ebp
.text:004FFA80 020                 jnz     loc_4FFB12
.text:004FFA86 020                 mov     eax, [esp+20h+arg_4]
.text:004FFA8A 020                 add     [esi+ebx+414h], eax
.text:004FFA91 020                 cmp     ebp, 25h        ; ebp >= 37
.text:004FFA94 020                 jge     short loc_4FFAC0
.text:004FFA96 020                 test    ebp, ebp        ; ebp <= ebp
.text:004FFA98 020                 jle     short loc_4FFAC0
.text:004FFA9A 020                 mov     ebp, dword_69DA30[ebp*4]
.text:004FFAA1 020                 test    ebp, ebp
.text:004FFAA3 020                 jl      short loc_4FFAC0
.text:004FFAA5 020                 mov     eax, [esi+ebx+414h]
.text:004FFAAC 020                 cmp     eax, ebp
.text:004FFAAE 020                 jl      short loc_4FFAB2
.text:004FFAB0 020                 mov     eax, ebp

Последний раз редактировалось VintProg; 27.06.2011 в 15:22.
VintProg вне форума Ответить с цитированием
Старый 27.06.2011, 15:32   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хм, в асм-коде метод, в С++ коде просто функция...или у вас делегирование там есть...

самое лучшее напишите асм вставку.
Цитата:
Я имел введу как точно вызвать __thiscall в дельфи...
по ссылке что привел Уткин информации достаточно.
this->ecx
аргументы в стек, как в stdcall
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 27.06.2011 в 15:35.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.06.2011, 16:50   #13
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Да это дизассемблировал exe-шник, IDA pro...
VintProg вне форума Ответить с цитированием
Старый 28.06.2011, 10:41   #14
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Ну рассказывайте!
VintProg вне форума Ответить с цитированием
Старый 28.06.2011, 10:59   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

что еще рассказать?
как написать асм вставку?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.06.2011, 11:38   #16
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Как это можно в дельфи реализовать...
VintProg вне форума Ответить с цитированием
Старый 28.06.2011, 14:29   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я уже вроде несколько раз сказал про asm вставку.
не можете её написать? так сказали бы прямо!

Код:
function CPed__giveWeapon(CPED:Pointer;weaponID:integer;ammo:integer;_aa:integer;this:Pointer):integer;stdcall;
asm
 push ecx
 mov ecx,this
 mov eax,_aa
 push eax
 mov eax,ammo
 push eax
 mov eax,weaponID
 push eax
 mov eax,CPED
 push eax
 mov eax,$4FFA50
 call eax
 pop ecx
end;
это мое видение по дизасму, а если по С++ коду, то
Код:
function CPed__giveWeapon(CPED:Pointer;weaponID:integer;ammo:integer;_aa:integer):integer;stdcall;
asm
 mov eax,_aa
 push eax
 mov eax,ammo
 push eax
 mov eax,weaponID
 push eax
 mov eax,CPED
 push eax
 mov eax,$4FFA50
 call eax
end;
так как в С++ коде нет ничего про то что это метод чей-то.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.06.2011, 05:00   #18
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

разве __stdcall?
VintProg вне форума Ответить с цитированием
Старый 29.06.2011, 09:22   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

опять же, про какой stdcall(и перестаньте подчеркивания ставить, оно для кода, названия не надо коверкать) речь, в переходнике ставлю что хочу, то и ставлю.
мне удобнее stdcall так как тогда не надо за регистрами следить.

а если речь про саму передачу параметров в переходнике, то это значит что по ссылук, любезно предоставленной Уткиным, вы не ходили.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.07.2011, 11:18   #20
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
stdcall
а то чно он пойдет для __thiscall?
VintProg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вызов метода неинициализированной переменной класса coinkrsk Общие вопросы C/C++ 4 02.01.2011 17:26
Получение исключений из метода класса. vedro-compota Общие вопросы .NET 3 20.12.2010 11:27
Ошибка при вызове метода класса coNsept Общие вопросы C/C++ 2 14.12.2010 13:09
Передача метода класса в CreateThread mike_tihomirov Win Api 3 17.07.2010 14:13
Адрес метода класса? VintProg Общие вопросы Delphi 6 27.09.2009 13:10