Показать сообщение отдельно

  #4989  
Старый 08.12.2020, 03:35
memir
Постоянный
Регистрация: 21.08.2015
Сообщений: 343
С нами: 5646349

Репутация: 163
По умолчанию

Цитата:
Сообщение от dekname  

Без static'a же тоже можно сделать callback. Получить адрес через union и дописать this на текущий класс (thunk). Например так:

C++:





Код:
// union
union
UnionCallbackCommand
{
using
ptr_t
=
void
(
SomeClass
::
*
)
(
const
char
*
)
;
ptr_t ptr
;
uint64_t
addr_as_uint64
;
}
;
// получение адреса
m_union_cmd_callback
.
ptr
=
&
SomeClass
::
Command
;
// в private:
UnionCallbackCommand m_union_cmd_callback
;
// регистрация команды:
m_input
->
AddCommand
(
"somecommand"
,
(
sampapi
::
CMDPROC
)
&
m_union_cmd_callback
.
addr_as_uint64
)
;
// сам callback
void
SomeClass
::
Command
(
const
char
*
cmd
)
{
}


Но так я получаю зависание игры, как можно пофиксить?
Действительно, делай static

Цитата:
Сообщение от Спойлер  

Ебани __cdecl метод, дальше в тханке пушь указатель на свой объект, делай call на обработчик, затем вытаскивай запушеные четыре байта, ретайся (первым аргументом в обработчике придется сделать адрес возврата).
Цитата:
 
Ответить с цитированием