728x90
고질적인 문제다.. VC6.0을 이용하는 개발자는 한번쯤은 누구가 격어보는 문제이지.
Debug에서는 잘 되는데 Release 에서 괜히 죽거나 프로그램 실행이 안되거나 하는 문제의 원인은...
누군가 아래와 같이 말하더군.
============
디버그 모드는 디버깅을 위한 정보뿐만 아니라 각종 변수들도 어느정도 초기화 해주는걸로 알고 있습니다.
그외에도 다른 처리(?)를 하는걸로 알고 있구요.
즉 에러가 날 가능성이 적다는 말이겠죠
시작하기전에 죽어버린다면 님이 작성한 프로그램의 초기화에서의 문제가 있다고 봐야겠군요.
초기화 하지 못한 변수라든가 올바르지못한 메모리할당등 초기화 부분에서의 문제를 살펴봐야 할 듯 합니다.
=============
그렇군. 초기화가 중요하단 얘기군. 알겠어.
그런데 본 프로젝트의 경우는 그런건 아닌거 같다. 이미 모든 초기화 상태를 체크했다.
본 프젝에서는 XHtmlTree 라는 콘트롤을 임포트해서 쓰고 있는데 그 콘트롤에 관련된 어떠한 함수를
호출하더래도 그냥 죽는현상이다... 심지어 함수안에서 아무 동작도 하지 않는다. 그래도 죽는다.
답답한건 디버그에서는 잘 동작한다. 릴리즈에서는 걍 뻗는다.. (장난하냐?)
트리에서 호출하는 함수는 팝업메뉴를 통해 호출되는데 코딩은 다음과 같이 하였다.
< program.h >
void OnFunction(WPARAM wParam, LPARAM lParam);
< program.cpp >
BEGIN_MESSAGE_MAP(CMyClass, CDialog)
//{{AFX_MSG_MAP(CMyClass)
ON_COMMAND(IDC_CALL_FUNCTION, OnFunction)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CIBKAgentManagerDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
VERIFY(menu.AppendMenu(MF_STRING, ID_CALL_FUNCTION, _T("뭔짓을해라")));
}
void CMyClass::OnFunction()
{
DoSomething();
}
이상한가? 난 여태까지 이렇게 해왔고 이상이 없었는데.. 하여간 이 코드에 문제가 있는거 같다.
이러한 형태의 코드 말고는 나머지 함수들은 정상작동하니 말이다.
그래서 일단 VC6.0으로 된 이 프로젝트를 VS2005에서 임포트 해서 컴파일 해보니..
ON_COMMAND(IDC_CALL_FUNCTION, OnFunction)
요 부분이 이상하댄다. 얘는 WPARAM, LPARAM 두개 인수를 갖는 함수형태를 못받는대나 모래나..
이상하네.. 그래서 ON_COMMAND 이걸
ON_BN_CLICKED(IDC_CALL_FUNCTION, OnFunction)
로 바꾸고 함수 원형에서 WPARAM, LPARAM을 빼버렸다.....
오. 마이. 갓... 잘돼네?
그럼.. 내가 여태 메세지매핑을 잘못사용해왔다는?? 그런거냐능??
Debug에서는 잘 되는데 Release 에서 괜히 죽거나 프로그램 실행이 안되거나 하는 문제의 원인은...
누군가 아래와 같이 말하더군.
============
디버그 모드는 디버깅을 위한 정보뿐만 아니라 각종 변수들도 어느정도 초기화 해주는걸로 알고 있습니다.
그외에도 다른 처리(?)를 하는걸로 알고 있구요.
즉 에러가 날 가능성이 적다는 말이겠죠
시작하기전에 죽어버린다면 님이 작성한 프로그램의 초기화에서의 문제가 있다고 봐야겠군요.
초기화 하지 못한 변수라든가 올바르지못한 메모리할당등 초기화 부분에서의 문제를 살펴봐야 할 듯 합니다.
=============
그렇군. 초기화가 중요하단 얘기군. 알겠어.
그런데 본 프로젝트의 경우는 그런건 아닌거 같다. 이미 모든 초기화 상태를 체크했다.
본 프젝에서는 XHtmlTree 라는 콘트롤을 임포트해서 쓰고 있는데 그 콘트롤에 관련된 어떠한 함수를
호출하더래도 그냥 죽는현상이다... 심지어 함수안에서 아무 동작도 하지 않는다. 그래도 죽는다.
답답한건 디버그에서는 잘 동작한다. 릴리즈에서는 걍 뻗는다.. (장난하냐?)
트리에서 호출하는 함수는 팝업메뉴를 통해 호출되는데 코딩은 다음과 같이 하였다.
< program.h >
void OnFunction(WPARAM wParam, LPARAM lParam);
< program.cpp >
BEGIN_MESSAGE_MAP(CMyClass, CDialog)
//{{AFX_MSG_MAP(CMyClass)
ON_COMMAND(IDC_CALL_FUNCTION, OnFunction)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CIBKAgentManagerDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
VERIFY(menu.AppendMenu(MF_STRING, ID_CALL_FUNCTION, _T("뭔짓을해라")));
}
void CMyClass::OnFunction()
{
DoSomething();
}
이상한가? 난 여태까지 이렇게 해왔고 이상이 없었는데.. 하여간 이 코드에 문제가 있는거 같다.
이러한 형태의 코드 말고는 나머지 함수들은 정상작동하니 말이다.
그래서 일단 VC6.0으로 된 이 프로젝트를 VS2005에서 임포트 해서 컴파일 해보니..
ON_COMMAND(IDC_CALL_FUNCTION, OnFunction)
요 부분이 이상하댄다. 얘는 WPARAM, LPARAM 두개 인수를 갖는 함수형태를 못받는대나 모래나..
이상하네.. 그래서 ON_COMMAND 이걸
ON_BN_CLICKED(IDC_CALL_FUNCTION, OnFunction)
로 바꾸고 함수 원형에서 WPARAM, LPARAM을 빼버렸다.....
오. 마이. 갓... 잘돼네?
그럼.. 내가 여태 메세지매핑을 잘못사용해왔다는?? 그런거냐능??
728x90
728x90