2009-09-09 5 views
1

Я конвертирую программу из C в C++. У меня есть набор компиляторов для использования соглашения о вызове __fastcall по умолчанию.Проблема декларации WNDPROC, преобразование из C в C++

Я использовал, чтобы иметь декларацию строку следующим образом:

INT32 PASCAL graph_window_handler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 

Позже у меня есть:

wndclass.lpfnWndProc = graph_window_handler; 

Это все компилируется и работает под C. Но в C++ я получаю все виды жалоб составляют компилятор о второй строке кода. Думаю, мне нужно изменить оригинальную декларацию на что-то, что связано с WNDPROC, возможно, с вложенным _cdecl? С INT32 или без него? но кажется, что каждая вариация, которую я пытаюсь, все еще жалуется. Как должно выглядеть заявление, чтобы на вторую строку не жаловались? - приветствуют.

ответ

5

Согласно MSDN documentation он должен выглядеть следующим образом:

LRESULT CALLBACK graph_window_handler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); 

И если вы будете проверять WinUser.h вы увидите, что WNDPROC typedef'ed следующим образом:

typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM); 
+0

Спасибо за то, , Я понятия не имею, как/почему «LRESULT CALLBACK» эквивалентен/применим к «WNDPROC», но, черт возьми, его работа, так что я буду делать. – Mick

+0

Спасибо за редактирование в дополнительной информации :-) – Mick