2013-04-09 1 views
2

저는 윈도우 라이브러리에 익숙해졌습니다. 새로운 것이지만, 제가 충분히봤을 때 오류가 나고 있습니다. 무슨 일이 일어나고 있는지 잘 모릅니다. 여기 RegisterClassEx 크래시 - C++

내 코드입니다 :

LRESULT CALLBACK WbWindow::st_wind_callback(HWND hWnd, UINT Message, WPARAM wParam, LPARAM 
lParam) 
{ 
// Code for the callback static function 
return 0; 
} 
WbWMResult WbWindow::Create() 
{ 
// Put in the class values for our window 
class_window_instance.cbSize = sizeof(WNDCLASSEX); 
class_window_instance.lpfnWndProc=WbWindow::st_wind_callback; 
class_window_instance.lpszClassName = window_name; 
class_window_instance.style = NULL; 
class_window_instance.cbClsExtra = 0; 
class_window_instance.cbWndExtra = 0; 
class_window_instance.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
class_window_instance.hCursor = LoadCursor(NULL, IDC_ARROW); 
class_window_instance.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
class_window_instance.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
class_window_instance.hInstance = main_instance; 
class_window_instance.lpszMenuName = NULL; 

if(!RegisterClassEx(&class_window_instance)){ 
    MessageBox(0,"There was an error registering the window-classname.","Critical Error!",MB_ICONSTOP | MB_OK); 
    return WBE_CLASSREG; 
} 

window_instance = CreateWindowEx(WS_EX_STATICEDGE,window_name,window_title,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,window_width,window_height,NULL,NULL,main_instance,NULL); 
if(window_instance == NULL){ 
    MessageBox(0,"There was an error creating a window.","Critical Error!",MB_ICONSTOP | MB_OK); 
    return WBE_WINCREATION; 
} 

created = WbTrue; 

return WB_SUCCESS; 
} 
내가 얻을, 그것은 디버거에서 오류의 오류

: 처리되지 않은 예외가, 그것이 .lpszMenuName에서 잘못된 포인터에 문제가하지만 그 작동 말한다 예를 들어, 왜 그런지 모르겠다.

어떻게 될까요? 어떻게 해결할 수 있습니까? window_name을하고 유효한 문자열 값이 WINDOW_TITLE -
감사

+0

죄송합니다. 이전 답변이 잘못되었으므로 충분히 조사되지 않았으므로 삭제할 수 있는지 확인하겠습니다. 어떤 개발 환경을 사용하고 있습니까? 또 다른 한가지는 class_window_instance 구조체가 초기화되지 않는다는 것입니다. WbWindow :: Create()의 시작 부분에서'memset (& class_window_instance, 0, sizeof (class_window_instance)); '? –

+0

나는 이미 그것을 시도했다 .... 슬픈 듯이'= {0}', 또는'memset', 또는'malloc' ... Visual Studio 2010을 사용하고있다. – Spamdark

+0

나는 VS2010에서 작은 프로젝트를 만들었다. 귀하의 코드와 함께, 나는 예외가 발생하지 않습니다. WindowProc에'DefWindowProc (hWnd, Message, wParam, lParam) return이 없기 때문에'CreateWindowEx()'에서 NULL 반환을 얻었습니다. 'RegisterClassEx()'호출에 중단 점을 넣고'class_window_instance' 구조체에서 이상한 것을 찾았는지 확인하십시오 - 미안 해요! –

답변

1

lpszClassNamelpWindowName은 LPCSTR로 정의? 그것들은 어디에 정의되어 있는가?

+0

로 게시되었습니다. 그게 내 친구 야! 감사! window_name과 window_title은 char *로 정의되었지만 실제로는 LPCSTR 정의가 아니므로 const char *가 필요합니다. 감사! – Spamdark

+0

당신은 char *를 const char *에 건네 줄 수 있습니다. 그래서 이것은 제가 말할 수있는 한 아무것도 대답하지 않습니다. –

+0

거의 char *와 작동하지 않았습니다. 이상하게 들리지만, 이제는 그 변화에 잘 맞습니다. – Spamdark

관련 문제