1

我正在将程序从 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?但似乎我尝试的每一个变化仍然受到抱怨。声明应该是什么样子才能使第二行不会被抱怨?- 欢呼。

4

1 回答 1

5

根据 MSDN文档,它应该如下所示:

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

如果你检查一下WinUser.h,你会看到WNDPROCtypedef'ed 如下:

typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
于 2009-09-09T11:30:45.917 回答