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

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

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

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

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

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

Объявил прототип на метод клсса:

Код:
TCPed__GiveWeapon =  procedure (i,i2,i3 : integer; CPed : pointer) of object;
Но увы не выходит, что-то не вызивается???
VintProg вне форума Ответить с цитированием
Старый 27.06.2011, 09:44   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А как Вы ее вызываете? И на что ругается компилятор?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.06.2011, 09:48   #3
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

компилятор не ругается! С плагина вызиваю
@Ped__GiveWeapon := ptr($004FFA50);

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

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

Формат тут не причем дельфийский...
VintProg вне форума Ответить с цитированием
Старый 27.06.2011, 10:55   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну а где сам метод? Покажи процедуру...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 27.06.2011, 12:20   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

метод класса, характеризуется двумя вещами:
1)объект this/self.
2)адрес самого метода
Цитата:
Формат тут не причем дельфийский...
ой как причем, Делфи то передаст self так, а метод то ждет его иначе.
так что вам нужно скорее всего писать свою обертку для корректного вызова функции.
просто имейте в виду, если разные языки.

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

Я все на с++ сделал и все работает:

Код:
auto fCheatWeapon  = reinterpret_cast<void(*)()>(0x004AEAF0);
auto fGetPlayerPed = reinterpret_cast<void*(*)()>(0x004BC140);
auto CPed__giveWeapon = reinterpret_cast<int (__thiscall *)(void* CPED, int weaponID, int ammo, int _aa)>(0x4FFA50);
auto fReguest_model  = reinterpret_cast<BYTE (__cdecl *)(int idModel, int)>(0x0040E310);
auto fRelease_stream = reinterpret_cast<int (__cdecl *) (int IdModel)>(0x0040AEA0);
VintProg вне форума Ответить с цитированием
Старый 27.06.2011, 13:08   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а чего вы взяли что у вас метод то?
судя по С++ коду, там просто процедура у которой указан тип соглашения thiscall, что не для методов равносильно stdcall
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.06.2011, 14:12   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Вроде как С++ по умолчанию оформляет вызов функций другим способом, не так как Дельфи. Чтобы все привести к одному знаменателю нужно как раз это явно указывать... Иначе не судьба
Ну вот для начала http://ru.wikipedia.org/wiki/%D0%A1%...BE%D0%B2%D0%B0
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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