typedef — обучение обращению через C ++, но что делает эта строка?

typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT);

Как я уже сказал, я пытаюсь научиться реинжинирингу программ с использованием C ++ / Assembly, поэтому я изучаю некоторые проекты с открытым исходным кодом, которые я нашел в Интернете. Но кто-нибудь может объяснить, что делает эта строка? Я не продвинутый в C ++, поэтому я перебираю источники.

-2

Решение

Ваш код на языке Си. Так что это также хорошо компилируется в C ++.

Пойдемте шаг за шагом.

  1. Вот объявление функции или прототип или подпись.
    Возвращает int, принимает 4 параметра:
int __stdcall MessageBoxA(HWND, LPCSTR, LPCSTR, UINT);
  1. Здесь ptr является переменная указателя на функцию :
int(__stdcall *ptr)(HWND, LPCSTR, LPCSTR, UINT);
ptr = NULL;
/ assign a correct adress
ptr = MessageBoxA;
// call the function with parameters using the pointer
(*ptr)(hWnd, NULL, NULL, 0);
  1. Вот __MessageBoxA — это тип это помогает определить переменную, которая является указателем на функцию:
typedef int(__stdcall *__MessageBoxA)(HWND, LPCSTR, LPCSTR, UINT);

Таким образом, указатель на переменную функции может быть объявлен.

__MessageBoxA ptr1 = NULL;

__stdcall — это способ, которым функция вызывается компилятором (передаются ли параметры слева направо или наоборот? Возвращаемое значение передается через стековую память или регистр ЦП?)

С уважением

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]