Пытаюсь реализовать класс с функцией, способной вызывать другие функции по адресам, но компилятор ругается:
Вот, что я пытался ему впарить:
Копаясь в интернете, я понял, что можно как-то сделать, чтобы функция объявлялась как обычная статическая и перекидывала аргументы через fastcall, stdcall и т.д., типа ты её объявил в переменной, но аргументы перекинул как в статическую и всё на ок сработало, но в тех громоздких конструкциях я так и не нашёл минималистичного примера, который смог бы понять. Всё как-то слишком уж перегружено
Отчаянно нуждаюсь в помощи в понимании этого механизма
то, что я уже написал, это попытка сделать прямой вызов MessageBoxA, не используя исходники, но зная оффсет в библиотеке (для чего и нужна эта функция в принципе)
Код:
результатом вычисления фрагмента не является функция, принимающая 4 аргументов
C++:
class user32
{
char* base_address;
template <typename function>
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, не используя исходники, но зная оффсет в библиотеке (для чего и нужна эта функция в принципе)