본문 바로가기

개발100

[C++]소멸자에서 가상함수 호출하기 소멸자에서 가상함수 호출하기 시도 요즘은 거의 코딩할일이 없다보니 블로그에 개발 관련 글을 포스팅할 기회조차 없네요 개발자라는 타이틀은 이제 빼야 할 때가 왔나 봅니다. ㅎㅎ 지난번 포스팅에서 간단하게 포인터를 Wrapping 하는 템플릿을 소개한적이 있습니다. [C++]포인터 Wrapping 클래스 만들기 나름 쓸모 있어서 요긴하게 사용하고 있는데요. 사용을 하다 보니 이 템플릿의 변종들이 필요하게 되었습니다. 지난번에 만든 포인트를 감싸는 템플릿 코드는 아래와 같습니다. template class IMyAutoPtr { public: IMyAutoPtr(){m_pPtr = NULL;} ~IMyAutoPtr() { if (m_pPtr) m_pPtr->Release(); m_pPtr = NULL; } T.. 2008. 10. 8.
[C++]포인터 Wrapping 클래스 만들기 요즘 회사 내에서 기존에 만들어진 컨트롤들을 새로 만들어 진 컨트롤로 변경하는 작업을 계속 진행 중입니다. 새로 만들어진 콘트롤들은 인터페이스 기반으로 만들어 져 있고 인터페이스는 조금씩 틀리지만 대부분 아래와 같은 선언과 생성, 리소스 반환 방식을 채택하고 있습니다. 1. 선언 IXXControlA* m_pControl; 2. 생성 m_pControl = NULL; m_pControl = GetControlA(); 3. 종료 함수 if (m_pControl) m_pControl->Release(); 와 같은 방식으로 사용하고 있습니다. 컨트롤들의 종료는 수십 가지이지만, 컨트롤을 생성하는 방식과, 모두 다 사용한 후 리소스를 반환하는 방식(->Release() 호출) 은 모두 동일합니다. 새로 만들어진.. 2008. 9. 9.
티스토리 블로그 댓글 알리미 티라이브 버전 0.3 새 버전이 나왔습니다. 아래 페이지에서 업데이트 바랍니다 2011/01/11 - [프로그램] - 티스토리 블로그 댓글 알리미 티라이브 버전 0.5지난 8/20일부터 티스토리의 관리자 화면 이 완전 새로워졌습니다.그 동안 사용자들의 많은 제안들을 받아 들여 아주 멋지게 변경되었더군요.  티스토리의 새 관리자를 맞아 2007년 11월 7일 티라이브 0.2 이후 거의 1년 동안 아무런 변경 없이 한 구석에 쳐 박혀 있던 티라이브 소스를 다시 꺼내 새 관리자에 맞도록 수정하는 작업을 진행했습니다. 티라이브의 내부 구조는 티스토리의 관리자 페이지를 파싱해서 댓글이나 트랙백 같은 필요한 부분만 가져오는 구조여서 이번에 변경된 새 관리자에 맞도록 수정하는 아주 마이너한 작업이 필요했거든요. .. 2008. 9. 5.
[C/C++] enum, 보다 나은 enum #define 과 얼핏 비슷해 보이지만, 비슷한 유형별의 데이터를 표현하기 위해 반드시 필요한 C++의 필수 타입인 enum 의 몇 가지 재미있고 유용한 팁을 소개합니다. 1. namespace 와 결합하기 일반적으로 enum 을 이용하여 타입이름을 짓기란 쉬운 일이 아닙니다. 만약 리스트에 필요한 정렬 기준을 enum 으로 표현한다면 아래 정도가 됩니다. enum SORT_LIST{ SORT_DATE, // 날짜순 SORT_NAME, // 이름 SORT_CONTENT, // 내용 S0RT_ETC, // 기타}; bool SortSomeData(SORT_LIST SortList){ switch (SortList) { case SORT_DATE: break; case S0RT_NAME: break; // .. 2008. 7. 21.
싱글톤 클래스 어플리케이션을 개발하다 보면 어플리케이션 전역으로 쓰이는 필수 클래스가 있게 마련입니다. 이런 클래스들은 그 특성상 하나의 인스턴스만 생성되어야 하고, 시스템 전역에서 사용하다 보니 이 클래스의 코드 수정으로 인한 시스템에 걸쳐 있는 다른 프로그램들의 수정이 최소화되도록 설계되는 게 보통입니다. 하나의 인스턴스만 생성되어야 하는 클래스를 보통 싱글톤 클래스라고 부르는데요, 요즘은 패턴관련 책들이 워낙 많아 싱글톤 패턴들은 이미 머리 속에 콕 하고 들어 있을 겁니다. 싱글톤 클래스를 만드는 방법 중에 제가 자주(늘~) 사용하는 방법은 패턴 책에 구현된 코드가 아닌 “More Effective C++” 책에 소개된 방법입니다. class Printer { public: void SubmitPrint(); ... 2008. 7. 1.
디버깅의 어려움과 즐거움 Visual Studio 2005 로 개발/운영 되어 오던 프로덕트를 Visual Studio 2008로 전환하는 작업을 얼마 전부터 진행 중에 있습니다. 2005 와 2008 은 내부 기반 구조에 있어 큰 차이가 없어서 금방 컨버젼이 끝났고 실제 런타임에서 정상적으로 실행이 되는 지 테스트를 하다가 몇몇 화면에서 프로그램이 비정상적으로 종료되는 문제를 발견했습니다. 디버그에서는 이미 정상적으로 실행됨을 확인한 상태였기 때문에 릴리즈 버전의 빌드에 문제가 있나 하고 여러 번 재 빌드를 했지만 (재 빌드 시간이 1-2시간 그냥 갑니다 --) 여전히 문제가 해결되지 않더군요. 워낙 여러 개발자가 동시에 프로그램을 수정 중이라 이런 일이 비일비재하긴 했지만, 이전까지 멀쩡하던 프로그램이 계속 죽어 나가는 게 .. 2008. 6. 16.
기념일을 잊지 말자 - 마이플래너 0.1a 해가 바뀔 때 마다 항상 하는 일 중에 하나는 새로 받은 탁상 달력이나 다이어리에 가족, 친구들의 생일을 다시 적는 일일 것입니다. 특히 음력생일인 경우에는 양력으로 변환된 날짜를 찾아내서 매번 기록하는 것이 연례행사가 된지 꽤 됐습니다. 마이플래너는 이러한 기념일 관리를 좀 더 편하게 사용하고자 만들었습니다. 간단한 사용방법 사용방법은 간단합니다. 프로그램을 처음 실행하면 그림과 같이 조금 썰렁한 윈도우만 있습니다. 마우스를 리스트에 가져가면 “클릭 시 신규 추가” 문구가 나옵니다. 마우스를 클릭해 새로운 기념일을 추가합니다. 신규 추가는 타이틀 바에 있는 “N’ 자 버튼을 눌러도 됩니다. 기념일 추가하기 기념일을 추가하는 방법은 다음과 같습니다. 타이틀: 기념일을 구분할 수 있는 내용을 기록합니다. .. 2008. 6. 6.
Fph.exe 유감 그리고 강제 종료시키기 요 며칠 고객 센터와 본사 라인을 통해 고객들 중 일부에서 저희가 만들고 있는 프로그램이 실행조차 안 된다는 연락이 왔습니다.이런 경우 대부분 바이러스나 스파이웨어 등으로 인한 문제였기 때문에 백신으로 치료하면 괜찮아 질 거라 생각하고 가벼이 여겼는데, 며칠 지나고 보니 동일 증상의 고객이 계속 늘어가더군요. 어떤 사람은 이것 때문에 PC를 포맷까지 했는데 며칠 지나고 또 같은 증상을 호소하기까지 했습니다. (얼마나 열 받았을까--) 이상하다 싶은 차에 해당 문제가 발생하는 고객들의 공통점을 확인해 본 결과, 작업 관리자에 “fph.exe” 라는 듣보잡 프로그램이 실행 중이었습니다. 그리고 어떻게든 이 프로그램을 종료시키니 이후 아무런 문제없이 저희 프로그램이 정상적으로 실행 된다네요. 이상타 여겨 구글.. 2008. 5. 16.
AfxGetInstanceHandle() 함수가 NULL 을 리턴하는 경우 며칠 전 별도로 진행되어오던 여러 프로젝트를 통합하던 과정에서 AfxGetInstanceHandle() 이 NULL 을 리턴하는 문제를 발견했습니다. 실행화일이 이제 겨우 Load 될려는 시점에서 문제가 발생한 터라 특별한 디거빙정보는 없고 디버거는 아래 MFC 라인에서 멈춰있었습니다. _AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle() { ASSERT(afxCurrentInstanceHandle != NULL); return afxCurrentInstanceHandle; } 대략 난감할 때면 언제나 그렇듯 구글링을 통해 여러가지 가능성을 점검하다가 아래 문서를 발견했습니다. How To Debug MFC Module and Thread State Probl.. 2008. 5. 13.
XmlLite 을 이용한 메뉴 XML 로딩하기 윈도우 어플리케이션의 설정을 저장하기 위해 윈도우 3.1 시절부터 널리 사용되어온 방법은 GetPrivateProfileInt GetPrivateProfileString/WritePrivateProfileString 함수를 이용하여 .ini 파일에 설정을 불러오고 저장하는 방식이었습니다. 워낙 간단하게 파일에 설정을 읽고 쓸 수 있기 때문에 아직까지도 많은 프로그램에서 이 방식을 선호하고 있습니다. 하지만 위 함수의 MSDN 도움말을 보면 이 함수는 16비트 하위호환성을 제공하기 위해 제공될 뿐 설정은 레지스트리에 저장하도록 권장(Should 는 권장이라기 보다 좀 더 의미가 강할 거 같습니다만) 하고 있습니다. Note This function is provided only for compatibili.. 2008. 4. 16.
Visual Studio 2008 Profiler 서진호님이 보내주신 Visual Studio Team System 2008 Team Suite (90일 평가판) CD 덕분에 Team Suite에만 있는 좋은 기능들을 미리 엿볼 수 있는 기회가 생겼습니다. 프로파일링 기능은 Visual Studio 2005 Team Suite에서도 역시 제공되던 기능이었는데 여태 사용법을 모르다가 얼마 전 MSDN Magazine의 기사를 보고 이제야 발견하게 되었습니다. 사용해 보니 상용 프로파일링 프로그램보다는 기능은 못하지만, 아무래도 Visual Studio IDE 에 결합되어 있다 보니 사용성은 좋은 편입니다. 프로파일링을 시작하려면 먼저 분석 메뉴에 있는 “성능 마법사 시작” 메뉴를 선택하면 됩니다. 성능마법사를 시작하면, 어떤 방법으로 계측을 할 것인지 물.. 2008. 3. 25.
Source Line Counter 요번에 만든 프로그램은 지정된 폴더의 모든 하위 폴더를 뒤져서, 폴더 별 소스 라인 수를 구하는 프로그램입니다. 개인적으로 회사 내 프로젝트의 라인 수를 구하기 위해 어제 저녁에 잠깐 동안 만든 프로그램이라, 완성도는 상당히~~ 떨어집니다 ^^; 프로그램 간단 설명 설명이라고 특별히 할만한 내용이 없습니다^^; 폴더 위치 입력기에 프로젝트의 소스 폴더를 입력하시고, [소스 라인 구하기]를 쿡 눌러주면 됩니다. 해당 폴더의 모든 하위 폴더를 재귀적으로 탐색 한 뒤에는 결과를 프로그램이 실행된 폴더의 result.csv 파일로 저장한 후 엑셀을 실행하도록 되어 있습니다. (결과 리스트에 내용을 채울까 하다가 리스트 컨트롤 만드는 법도 거의 다 잊었고, 어차피 결과를 한눈에 보고 필터링하기에는 엑셀이 좋을 것.. 2008. 3. 19.
Visual Studio 2005의 Code Analysis 기능 지난 2월 23일 날 진행되었던 2008년, Visual C++와 MFC의 변화 따라잡기 관련 글을 따라가다가 “Visual C++ 2008을 이용한 debugging과 Crash Dump Analysis 노하우 2008 (신경준 MVP / 안철수 연구소)” 세션 자료를 보게 되었습니다. 내용이 하도 좋아서, 교육을 진행한 신경준님의 블로그까지 방문하게 되었는데, 대박 좋은 글들을 많이 발견하게 되었습니다. 갱주니 블로그(AiWisdom) 방문해 보시면 아시겠지만 Visual Studio 2008 에 대한 글뿐만 아니라, Visual Studio 2005 와 디버깅에 관련된 상당히 깊이 있는 내용까지…… 책에서 구하기 힘든 좋은 내용이 아주 많습니다. (안랩은 여러 해 동안 저희 회사와 계약 중에 있어서.. 2008. 3. 11.
마이너가 된 IE 8, 그리고 생각해 봐야 할 하위호환성 문제 마이크로소프트의 IE 8 이 드디어 베타 테스트에 들어 갔네요. 요즘 회사 일로 UI 에 관심이 많아 IE 8 의 달라진 UI를 구경하기 위해 바로 설치했습니다. XP SP2 PC에서 설치하는데, 정품인증 과정을 거치라는 좀 귀찮은 과정이 있었고 2번 리부팅해서 겨우 설치 했습니다. 브라우저 하나 설치 하는데 부팅을 2번 하는 건 좀 심하네요. 워낙 IE 자체가 마이크로소프트 시스템 내부와, 특히 탐색기 쪽과 관련이 많고, IE Control 을 지원하기 위한 부분도 많아서 그런 것으로 보이는데, 이러한 것들이 오히려 일반 사용자들에게는 타 브라우저와 비교대상으로 보여질 가능성도 커 보입니다. 마이너가 된 IE 8 웹 브라우저 시장에서 독보적인 존재였던 MS 가 IE 8을 내 놓으면서 이제는 마이너로 돌.. 2008. 3. 7.
유니코드로 개발하기(MFC 프로젝트) MFC 로 거의 10년이 넘게 유지 보수해 오던 회사 프로젝트를 드디어(이제야?) 유니코드로 이전한다고 합니다. 막상 유니코드로 이전하려고 하니, 그 동안 익숙하게 사용해 오던 함수들, 특히 strcpy, memcpy 와 같은 표준 C 라이브러리가 애물단지가 되고 말았습니다. 진작에 갔어야 하는데, 차일피일 미루다 보니 한번에 수정하기엔 너무 부담스러울 정도로 덩치가 커져 버렸네요. 유니코드를 위해 엄청난 소스 수정을 앞두고(저희 회사 프로그램 소스가 제가 생각해도 엄청(?)납니다)스스로 하나씩 배워가고 있는 내용(아주 초보적인 내용이긴 합니다만)을 조금 정리했습니다. 유니코드 에 대해서 유니코드를 알려면 현재 저희가 너무나 친숙하게 사용하고 있는 ASCII 코드를 알 필요가 있습니다. ASCII 코드는.. 2008. 3. 5.
윈도우 비스타 어플리케이션 아이콘 윈도우 비스타의 에어로 스타일 아이콘에서는 최대 256 * 256 픽셀의 아이콘이 가능해 졌습니다. 이전보다 한결 커진 이미지 사이지 덕분에 그 동안 제대로 표현하지 못했던 디테일을 살릴 수 있게 되었고 사용자에게도 어플리케이션이나 문서의 역할을 보다 직관적으로 전달할 수 있게 되었더군요. [비스타의 화려한 내 컴퓨터 아이콘] 비스타에서 이렇게 큰 아이콘을 도입하게 된 계기는 점점 더 해상도가 높아지고 있는 모니터와 연관이 있다고 합니다. 일반적인 모니터는 1인치에 96개의 픽셀을 표현할 수 있는데(96 DPI(dots/pixels per inch)) XP 의 가장 큰 바탕화면 아이콘인 48 * 48 크기가 일반 모니터에서는 약 0.5인치 정도의 공간을 차지고 있다면, 미래의 모니터환경에서는 192 DP.. 2008. 2. 29.
Visual Studio 버전 별 STL 지원 국내에는 아직도 Visual Studio 6.0으로 개발 및 운영되는 프로젝트가 상당히 많은 편입니다. (MFC 어플리케이션 분야에서) 주위를 둘러봐도 Visual Studio 2005 는 고사하고 2003 버전으로 개발된 프로젝트도 드문 편이더군요. 컴파일러가 변경되면서 이전보다 훨씬 나은 성능과 훌륭한 UI 를 제공했다면 대부분의 사람들이 이미 새로운 버전으로 넘어왔을 텐데 제가 생각해도 마이크로소프트가 C++ 과 MFC 지원에 그간 참으로 무심했던 것 같습니다. 사실 컴파일러의 버전업이 닷넷이나, C# 을 위한 버전업이었고 이전부터 MFC 는 죽었다라는 얘기는 계속 전해져 왔으니 어느정도는 사실처럼 고착화 된 것 같습니다. Visual Studio 2008 도 나오고 해서 Visual Studio .. 2008. 2. 28.
윈도우 배경화면을 자동으로 변경하는 프로그램 – ezWallPaper 0.1 새로운 버전이 나왔습니다. 새 버전은 이 곳 글에서 확인 하시기 바랍니다. 2010/02/03 - [프로그램] - 윈도우 배경화면을 자동으로 변경하는 프로그램 - ezWallPaper 0.2 ezWallPaper란 윈도우 바탕화면에 있는 배경을 자동으로 변경해 주는 프로그램입니다. 기능이 이것 밖에 없다 보니 딱히 더 설명할 것도 없네요 ^^;; ezWallPaper 주요 기능 사용자가 지정한 주기에 맞춰 자동으로 윈도우 배경화면을 변경합니다. 파일 단위가 아니라 폴더에 들어 있는 이미지 파일을 대상으로 자동으로 배경을 변경합니다.윈도우 바탕화면 빠른 탐색으로 배경화면을 수동으로 전환할 수 있습니다. ezWallPaper 설정하기 프로그램을 다운받아 압축을 푼 뒤 ezWallPaper.exe 를 실행하시.. 2008. 2. 21.
내가 비스타를 쓰지 않는 이유 개발자인 제가 아직도 비스타로 Upgrade 하지 않는 가장 큰 이유는 UAC 정책 때문입니다. 비스타에서는 악의적인 ActiveX 설치로부터 일반 사용자를 보호하기 위해 프로그램 설치, 레지스터리 접근, 특정 폴더 접근 등에 모두 UAC 의 간섭을 받게 되고, 사용자에게 권한상승을 허락할 것인지 여부를 물어 보도록 하고 있습니다. 저도 이 기능의 Concept 자체가 문제가 있다고 생각하지는 않습니다. 문제는, 이 강력한 UAC가 COM의 등록까지 간섭하기 때문입니다. (어차피 OS 입장에서는 COM 이나 ActiveX 나 같은 놈으로 처리하게 되어 있습니다) 웹 브라우저에서 ActiveX 등록도 아니고, 고객이 정상적으로 설치한 어플리케이션이 자신이 사용할 COM 모듈을 등록하는데도 매번 UAC 의 .. 2008. 1. 14.
WPF 성공할 수 있을까? 어제 Mary Jo Foley 가 쓴 WPF 에 관련된 포스트를 읽어 봤는데요. One year later: Where are the killer Vista apps? 포스트 내용을 요약하면 올 1월에 마이크로소프트와 야후는 윈도우 비스타에 최적화된 WPF 기반 야후 메신저를 개발키로 했다고 합니다. 두 회사의 비중으로 봐서 누가 봐도 대단한 WPF 기반 어플리케이션이 나올 거라 상상했을 텐데요 하지만 거의 1년이 다 되어 가는 12월 6일에야 정식버전도 아닌 프리 베타 버전의 야후 메신저를 발표했다고 하네요. 무엇이 이렇게 WPF 기반 어플리케이션을 개발하는데 오래 걸리게 하는 것인지, 사용자를 비스타로 건네오게 할 진정한 비스타 용 킬러 어플리케이션은 없는 것인지 묻고 있습니다. MFC 기반 어플리케.. 2007. 12. 8.