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

  #7583  
Старый 02.08.2025, 23:06
swlm
Познающий
Регистрация: 03.08.2022
Сообщений: 57
С нами: 1990627

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

Цитата:
Сообщение от вайега52  

Потому-что эта функция вызывается в бесконечном цикле игры и не морозит основной поток, т.е. если нет пакета для получения, возвращается nullptr (под капотом там обычное получение пакета из потокобезопасной очереди, которая пополняется внутри ракпира). Делай проверку на nullptr и должно работать
Да, сяб, проверил и всё работает.

Получается этот вариант хука правильный?

C++:





[CODE]
bool
Hooks
::
HookReceive
(
)
{
HMODULE sampModule
=
GetModuleHandleA
(
"samp.dll"
)
;
if
(
!
sampModule
)
{
return
false
;
}
// Получаем указатель на рак клиент
RakClientInterface
*
*
rakclient
=
reinterpret_cast

(
AVSSync
::
getRakClientIntf
(
)
)
;
if
(
!
rakclient
)
{
return
false
;
}
DWORD
*
vTable
=
*
reinterpret_cast

(
rakclient
)
;
LPVOID target
=
reinterpret_cast

(
vTable
[
8
]
)
;
MH_STATUS createStatus
=
MH_CreateHook
(
target
,
&
HookedReceive
,
reinterpret_cast

(
&
originalReceive
)
)
;
if
(
createStatus
!=
MH_OK
)
{
return
false
;
}
MH_STATUS enableStatus
=
MH_EnableHook
(
target
)
;
if
(
enableStatus
!=
MH_OK
)
{
return
false
;
}
std
::
cout

 
Ответить с цитированием