从 WNDPROC 转换为 LONG
cast from WNDPROC to LONG
static LRESULT CALLBACK wndProcNew(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int CALLBACK wWinMain(HINSTANCE hInst,HINSTANCE,PWSTR szcmdLine,int cmdShow){
using namespace std;
Pixel pix;
LONG tmp = SetWindowLong(pix.getWnd(), GWLP_WNDPROC, (LONG)wndProcNew);
return 0;
}
我想更改 window 程序。 mingw 抛出错误:
error: cast from 'LRESULT ()(HWND, UINT, WPARAM, LPARAM)' {aka 'long
long int ()(HWND__*, unsigned int, long long unsigned int, long long
int)'} to 'LONG' {aka 'long int'} loses precision [-fpermissive] 21
| LONG tmp = SetWindowLongW(pix.getWnd(), GWLP_WNDPROC,
(LONG)wndProcNew);
我做错了什么?
在 64 位 Microsoft Windows 上,指针(包括函数指针)的大小为 64 位,而 long
或 LONG
类型的变量的大小为 32位。因此,该大小的变量无法表示指针的值。
如果你想设置 64 位值,我建议你使用 SetWindowLongPtr
而不是 SetWindowLong
。
static LRESULT CALLBACK wndProcNew(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int CALLBACK wWinMain(HINSTANCE hInst,HINSTANCE,PWSTR szcmdLine,int cmdShow){
using namespace std;
Pixel pix;
LONG tmp = SetWindowLong(pix.getWnd(), GWLP_WNDPROC, (LONG)wndProcNew);
return 0;
}
我想更改 window 程序。 mingw 抛出错误:
error: cast from 'LRESULT ()(HWND, UINT, WPARAM, LPARAM)' {aka 'long long int ()(HWND__*, unsigned int, long long unsigned int, long long int)'} to 'LONG' {aka 'long int'} loses precision [-fpermissive] 21 | LONG tmp = SetWindowLongW(pix.getWnd(), GWLP_WNDPROC, (LONG)wndProcNew);
我做错了什么?
在 64 位 Microsoft Windows 上,指针(包括函数指针)的大小为 64 位,而 long
或 LONG
类型的变量的大小为 32位。因此,该大小的变量无法表示指针的值。
如果你想设置 64 位值,我建议你使用 SetWindowLongPtr
而不是 SetWindowLong
。