Проблема с объявлением WNDPROC, преобразование с C на C ++
Вопрос
Я конвертирую программу с C на C ++.У меня есть компилятор, настроенный на использование соглашения о вызове __fastcall по умолчанию.
Раньше у меня была строка объявления следующего вида:
INT32 PASCAL graph_window_handler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Позже у меня есть:
wndclass.lpfnWndProc = graph_window_handler;
Все это скомпилировано и работало под управлением C.Но в C ++ я получаю всевозможные жалобы от компилятора по поводу второй строки кода.Я предполагаю, что мне нужно изменить исходное объявление на что-то, связанное с WNDPROC, возможно, с добавлением _cdecl?С INT32 или без него?но, похоже, на каждый вариант, который я пробую, все равно жалуются.Как должно выглядеть объявление, чтобы на вторую строку не поступали жалобы?- ваше здоровье.
Решение
Согласно MSDN Документация это должно выглядеть следующим образом:
LRESULT CALLBACK graph_window_handler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
И если вы проверите WinUser.h
вы увидите, что WNDPROC
заданный тип выглядит следующим образом:
typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);