C++ 为什么GWL_WNDPROC未定义?

C++ 为什么GWL_WNDPROC未定义?,c++,C++,这是我收到的唯一错误,似乎找不到解决方法windows.h和Winuser.h都包括在内,所以我认为不是这样 DWORD WINAPI MainThread(LPVOID param) { HWND window = FindWindowA(NULL, windowName); oWndProc = (WNDPROC)SetWindowLongPtr(window, GWL_WNDPROC, (LONG_PTR)WndProc); IDirect3D9 * pD3D

这是我收到的唯一错误,似乎找不到解决方法
windows.h
Winuser.h
都包括在内,所以我认为不是这样

DWORD WINAPI MainThread(LPVOID param)
{
    HWND  window = FindWindowA(NULL, windowName);

    oWndProc = (WNDPROC)SetWindowLongPtr(window, GWL_WNDPROC, (LONG_PTR)WndProc);

    IDirect3D9 * pD3D = Direct3DCreate9(D3D_SDK_VERSION);

    if (!pD3D)
        return false;

    D3DPRESENT_PARAMETERS d3dpp{ 0 };
    d3dpp.hDeviceWindow = window, d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD , d3dpp.Windowed = TRUE;

    IDirect3DDevice9 *Device = nullptr;
    if (FAILED(pD3D->CreateDevice(0, D3DDEVTYPE_HAL, d3dpp.hDeviceWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &Device)))
    {
        pD3D->Release();
        return false;
    }

使用
SetWindowLongPtr()
时,根据需要,正确使用的值是
GWLP\u WNDPROC
,而不是
GWL\u WNDPROC
GWL\u WNDPROC
SetWindowLong()
一起使用


GWL\u WNDPROC
GWLP\u WNDPROC
都在
winuser.h
中定义。但是,如果定义了
\u WIN64
,则不会定义
GWL\u WNDPROC
。这是有道理的,因为
SetWindowLong()
在64位版本中不可用
SetWindowLongPtr()
是为了支持64位而引入的。

“windows.h和Winuser.h都包含在VB中”--对不起,什么?,
SetWindowLongPtr
采用了
GWLP\U WNDPROC
(以及其他)。注意额外的
P
@rory.ap必须包含它们,我的目录由于某些原因没有自动包含它们。(抱歉英语不好!)@IgorTandetnik那么这个错误是假的吗?这个错误是真的。您的代码使用了错误的名称。