이번 프로젝트에 폼뷰에 Crystal Edit를 올려서 사용하기로 결정하고
CodeProject에서 Crystal Edit 소스를 다운 받았습니다.
이리 저리 해서 드디어 폼뷰에 올리는것을 성공했습니다.
허나 문제가 발생하기 시작했습니다.
Crystal Edit에 키가 먹지 않는것입니다.
이런 문제는 제가 개인적인 프로젝트를 진행할때도 발생한 문제였습니다.
이 문제는 인터넷의 힘으로 해결했습니다.(WM_GETDLGCODE)
다 해결했다하고 프로그램을 종료하는데 에러가 발생하는게 아니겠습니까!
이전에는 이런 문제가 발생하지 않았었는데...
CodeProject에서 Crystal Edit 소스를 다운 받았습니다.
이리 저리 해서 드디어 폼뷰에 올리는것을 성공했습니다.
허나 문제가 발생하기 시작했습니다.
Crystal Edit에 키가 먹지 않는것입니다.
이런 문제는 제가 개인적인 프로젝트를 진행할때도 발생한 문제였습니다.
이 문제는 인터넷의 힘으로 해결했습니다.(WM_GETDLGCODE)
다 해결했다하고 프로그램을 종료하는데 에러가 발생하는게 아니겠습니까!
이전에는 이런 문제가 발생하지 않았었는데...
Crystal Edit를 올리고 나서 발생한 문제이니 Crystal Edit에 문제가 있을거라 생각하고
몇시간을 버그를 잡는 허비 했습니다만 눈만 아플뿐 버그를 잡지는 못했습니다.
마지막 심정으로 멤버 변수를 멤버 포인터 변수로 수정하고 메모리를 할당하고 Crystal Edit를 생성했습니다.
그랬더니 프로그램 종료시 에러가 발생하지 않는것이었습니다.
이렇게 문제는 해결했으나 그 원인을 알아야 겠기에
Crystal Edit의 클래스들의 소멸자에 메시지를 띄우게 하고 역시 폼뷰의 소멸자의 시작에 메시지를 띄우게 했습니다.
소멸되는 순서를 볼려고 한거죠.
그랬더니 Crystal Edit가 종료되고 그 소멸자도 실행한뒤에 폼뷰의 소멸자가 실행되는 것이었습니다.
일반적으로 클래스의 멤버 변수는 클래스의 소멸자에서 소멸하게 되는데
이번 현상으로 이러한 순서가 지켜지지 않아서 그렇게 되는 것이었습니다.
Crystal Edit의 클래스는 CView를 상속하고 있었습니다.
그럼 CView는 윈도우가 종료될때 그 소멸자도 함께 불려진다는 말이 되는데....
Crystal Edit는 폼뷰의 멤버 변수이니까 폼뷰의 소멸자에서 다시 한번 소멸자가 불려지게 되는것입니다.
그래서 에러가 발생하게 되죠.
몇시간을 버그를 잡는 허비 했습니다만 눈만 아플뿐 버그를 잡지는 못했습니다.
마지막 심정으로 멤버 변수를 멤버 포인터 변수로 수정하고 메모리를 할당하고 Crystal Edit를 생성했습니다.
그랬더니 프로그램 종료시 에러가 발생하지 않는것이었습니다.
이렇게 문제는 해결했으나 그 원인을 알아야 겠기에
Crystal Edit의 클래스들의 소멸자에 메시지를 띄우게 하고 역시 폼뷰의 소멸자의 시작에 메시지를 띄우게 했습니다.
소멸되는 순서를 볼려고 한거죠.
그랬더니 Crystal Edit가 종료되고 그 소멸자도 실행한뒤에 폼뷰의 소멸자가 실행되는 것이었습니다.
일반적으로 클래스의 멤버 변수는 클래스의 소멸자에서 소멸하게 되는데
이번 현상으로 이러한 순서가 지켜지지 않아서 그렇게 되는 것이었습니다.
Crystal Edit의 클래스는 CView를 상속하고 있었습니다.
그럼 CView는 윈도우가 종료될때 그 소멸자도 함께 불려진다는 말이 되는데....
Crystal Edit는 폼뷰의 멤버 변수이니까 폼뷰의 소멸자에서 다시 한번 소멸자가 불려지게 되는것입니다.
그래서 에러가 발생하게 되죠.
댓글
댓글 쓰기