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那么这个错误是假的吗?这个错误是真的。您的代码使用了错误的名称。