Jim*_*ell 2 c++ winapi visual-studio-2008
在我的Win32 C++ DLL中,我发现如果我尝试使用RegisterClassEx这种方式它可以正常工作:
WNDCLASSEX wx = {};
wx.cbSize = sizeof(WNDCLASSEX);
wx.lpfnWndProc = (WNDPROC)WndProc; // function which will handle messages
wx.hInstance = GetCurrentModule();
wx.lpszClassName = pClassName;
atomRet = RegisterClassEx( &wx );
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用RegisterClassEx这种方式时,它会失败,atomRet设置为零,并且异常文本只是说"参数不正确".
WNDCLASSEX * _pWndClassEx;
_pWndClassEx = (WNDCLASSEX *)malloc( sizeof(WNDCLASSEX) );
_pWndClassEx->cbSize = sizeof(WNDCLASSEX);
_pWndClassEx->lpfnWndProc = (WNDPROC)WndProc; // function which will handle messages
_pWndClassEx->hInstance = GetCurrentModule();
_pWndClassEx->lpszClassName = pClassName;
atomRet = RegisterClassEx( _pWndClassEx );
Run Code Online (Sandbox Code Playgroud)
我在MSDN文档中RegisterClassEx注意到它的定义如下:
ATOM WINAPI RegisterClassEx(
__in const WNDCLASSEX *lpwcx
);
Run Code Online (Sandbox Code Playgroud)
这是否意味着lpwcx必须指向静态分配的内存?也就是说,它不能指向动态分配的内存(使用分配malloc)?谢谢.
当你这样做时:
WNDCLASSEX * _pWndClassEx;
Run Code Online (Sandbox Code Playgroud)
你没有为结构分配任何内存.你需要做一些事情:
WNDCLASSEX * _pWndClassEx = new WNDCLASSEX;
Run Code Online (Sandbox Code Playgroud)
在分配给结构中的成员之前.
但是,我没有看到动态分配WNDCLASSEX结构的任何理由,因为一旦你打电话,你真的不需要它RegisterClassEx.
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |