Nic*_*ton 9 c++ winapi function-pointers
请问有人可以给我一些创建MS winapi函数函数指针的技巧吗?我正在尝试为DefWindowProc(DefWindowProcA/DefWindowProcW)创建一个指针,但是收到此错误:
LRESULT (*dwp)(HWND, UINT, WPARAM, LPARAM) = &DefWindowProc;
error C2440: 'initializing' : cannot convert from
'LRESULT (__stdcall *)(HWND,UINT,WPARAM,LPARAM)'
to 'LRESULT (__cdecl *)(HWND,UINT,WPARAM,LPARAM)'
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚我需要使用什么因为我不习惯MS ascii/wide宏.顺便说一下,我正在创建一个快速入侵的函数指针,不幸的是我没有时间解释原因 - 但无论如何,我认为这个问题对于需要创建winapi函数指针的人会有所帮助.
这段代码有效,但我担心这是不好的做法(并且不遵守unicode/ascii编译选项).我应该定义两个规格吗?
LRESULT (__stdcall* dwp)(HWND, UINT, WPARAM, LPARAM) = &DefWindowProc;
Run Code Online (Sandbox Code Playgroud)
这更好(感谢nobugz):
WNDPROC dwp = DefWindowProc;
Run Code Online (Sandbox Code Playgroud)
Han*_*ant 16
修复调用约定不匹配,如下所示:
LRESULT (__stdcall * dwp)(HWND, UINT, WPARAM, LPARAM) = DefWindowProc;
Run Code Online (Sandbox Code Playgroud)
typedef可以使它更具可读性:
typedef LRESULT (__stdcall * WindowProcedure)(HWND, UINT, WPARAM, LPARAM);
...
WindowProcedure dwp = DefWindowProc;
Run Code Online (Sandbox Code Playgroud)
但是,<windows.h>已经有了一个typedef,你可以使用它:
WNDPROC dwp = DefWindowProc;
Run Code Online (Sandbox Code Playgroud)