我正在将程序从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?但似乎我尝试的每一个变化仍然被抱怨。宣言应该是什么样的,以至于第二行不会被抱怨? - 干杯。
答案 0 :(得分:5)
根据MSDN documentation,它应如下所示:
LRESULT CALLBACK graph_window_handler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
如果您检查WinUser.h
,您会看到WNDPROC
typedef'如下:
typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);