Пытаюсь реализовать класс с функцией, способной вызывать другие функции по адресам, но компилятор ругается:
Код:
Код:
результатом вычисления фрагмента не является функция, принимающая 4 аргументов
Вот, что я пытался ему впарить:
C++:
Код:
class
user32
{
char
*
base_address
;
template
void
call
(
function func
,
int
a
,
const
char
*
b
,
const
char
*
c
,
long
d
)
{
func
(
a
,
b
,
c
,
d
)
(
)
;
}
public
:
user32
(
)
{
base_address
=
(
char
*
)
GetModuleHandleA
(
"user32.dll"
)
;
}
void
MessageBoxA
(
int
a
,
const
char
*
b
,
const
char
*
c
,
long
d
)
{
call
(
(
base_address
+
0x77B30
)
,
a
,
b
,
c
,
d
)
;
}
}
;
Копаясь в интернете, я понял, что можно как-то сделать, чтобы функция объявлялась как обычная статическая и перекидывала аргументы через fastcall, stdcall и т.д., типа ты её объявил в переменной, но аргументы перекинул как в статическую и всё на ок сработало, но в тех громоздких конструкциях я так и не нашёл минималистичного примера, который смог бы понять. Всё как-то слишком уж перегружено
Отчаянно нуждаюсь в помощи в понимании этого механизма
то, что я уже написал, это попытка сделать прямой вызов MessageBoxA, не используя исходники, но зная оффсет в библиотеке (для чего и нужна эта функция в принципе)