본문 바로가기

분류 전체보기

가상 함수 / 순수 가상 함수/ 비가상 함수 이 글은 'Effective C++'의 항목34의 내용 입니다.(항목 34: 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자)글쓰는 스타일도 베껴 왔습니다. 가상함수 / 순수 가상 함수 / 비가상 함수 (public) 상속이란 개념은 두가지로 나뉩니다.함수 인터페이스 상속과 함수 구현의 상속입니다. 클래스 설계할때, 다음의 경우가 있을 거에요 - 멤버 함수의 인터페이스(선언)만 파생 클래스에서 상속받고 싶을때 - 함수의 인터페이스 및 구현 모두 상속 받고, 그 상속받은 구현이 오버라이드 가능하게 하고 싶을때 - 인터페이스와 구현을 상속받되 어떤 것도 오버라이드할 수 없도록 막고 싶을 때 예제를 보면서 몸으로 느껴는게 중요합니다.그래픽 응용프로그램에 쓰이는 도형을 나타내는 클래스 구조를 생각.. 더보기
Visual Studio 와 배포 Visual Studio 와 배포에 관한여... "응용프로그램 구성이 올바르지 않기 때문에 이 응용 프로그램을 시작하지 못했습니다. 이 문제를 해결하려면 응용 프로그램을 다시 설치하십시오"와 같은 문제가 있다면? V isual c++ 2005부터는 배포 하기 위해 상당히 귀찮은 작업이 필요하다.아래에 자세한 설명이 있으니 참고. 1 . Visual Studio 2005/2008 개발한 app 배포하기 : http://serious-code.net/moin.cgi/RedistributingVisualCppRunTimeLibrary : http://blogs.msdn.com/b/vcblog/archive/2007/10/12/how-to-redistribute-the-visual-c-libraries-with.. 더보기
Window 7에서 iis 설정 관련 (HTTP 오류 404.3 - Not Found) Window 7에서 iis 설치후HTTP 오류 404.3 - Not Found 문제 :1. Windows7 에서 iis 설치후 .xml 파일은 로딩이 되지만, 임의의 확장자(ex, .ui, xzy,...)는 Page Not Found !!!즉, well-known 확장자는 웹브라우저에서 잘 열리지만,처음 보는 확장자는 열리질 않는다.(.ui, .py, .ias등 아래의 방법대로 추가해 줘야 한다) 2. 에러 메시지 (브라우저에서 아래와 같은 정보를 알아서 제공해준다.) 이리저리 검색사이트를 뒤졌지만, 결국은 아래와 같이 해주면 해결 된다 -_- >> 다음 구문을 사용하여 MIME 형식 설정 (.ui를 브라우저가 읽을 수 있게 MIME type을 'text/pain'로 설정 %SystemRoot%\wind.. 더보기
[winapi] DC에 대해서...(GetDC / BeginPaint) ### DC (Device Context) ### ** DC란?cairo로 windows에 그림을 그릴때도 Windows DC가 필요하다.때문에 WinAPI의 DC에 대해서 알 필요가 있다. # 기초부터 짚고 넘어가보자Windows는 3개의 DLL(동적 연결 라이브러리)로 구성되어 있다. - KERNEL : 메모리 관리 및 프로그램 실행 - USER : 유저 인터페이스와 윈도우 관리 - GDI : 화면 처리와 그래픽 담당 Windows API 함수 대부분은 이 세가지 DLL에 의해 제공되는 것이다. 즉, Windows의 클라이언트 영역에 그리기를 하려면 이 GDI(Graphics Device Interface) 함수를 사용해야 한다.그리고 HDC는 'Handle to a Device Context' 로 .. 더보기
TRACE 이야기 아래의 링크에 정리가 너무 잘되어 있어 링크만 겁니다. 1. 첫번째 이야기 2. 두번째 이야기 3. 세번째 이야기 4. 네번째 이야기 5. 다섯번째 이야기 6. 여섯번째 이야기 7. 일곱번째 이야기 출처 : http://mgdn.tistory.com 더보기
[MFC] My Thread MFC에서 쓰레드 만들때copy & paste 용도 My ThreadBOOL CUTMModuleDlg::ServiceStart() { // server thread m_ServerThreadKill.ResetEvent(); m_ServerThreadEnd.ResetEvent(); CWinThread* pServerThread = NULL; pServerThread = AfxBeginThread(ServerProc, (LPVOID)this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); if (pServerThread == NULL) { return FALSE; } else { pServerThread->ResumeThread(); } return TRUE; }void .. 더보기
스레드 수행 시간 측정 (보다 정밀한) ★ 쓰레드 수행 시간 + 시간 측정을 위해 대부분 GetTickCount64 함수를 이용 - 이 코드가 올바른 값을 획득하려면 코드 수행중 인터럽트가 수행되지 않았다는 가정 필요 - 선점형 운영체제에서는 쓰레드가 언제 CPU에 의해 수행될지 알수 없음 - 현재 코드를 수행 중 다른 작업 수행 가능 - 따라서, 쓰레드가 소비한 시간 부정확 - 실제 쓰레드가 부여받은 CPU 시간이 얼마나 되는지 알아내는 함수 필요 - GetThreadTimes / GetProcessTimes 함수 제공 + TSC (Time Stamp Counter) 이용 - 비스타 이전에는 clock timer를 기반으로 10에서 15 밀리초 단위로 CPU 시간 계산 - 비스타 부터 머신이 기동된 후부터 얼마만큼의 CPU 사이클이 수행되었.. 더보기
Process 생성 및 종료 * 프로세스 생성 + CreateProcess 함수를 사용하여 새로운 프로세스 생성 + CreateProcess함수는 새로 생성된 프로세스가 완전히 초기화되기 전에 TRUE 반환 - 운영체제의 로더가 새로운 프로세스가 필요로하는 dll을 로드하기 전에 TRUE를 반환하기 때문에, 페어런트 프로세스는 차일드 프로세스에 어떤 초기화 문제가 발생했는지 알 수 없음 + 새로운 프로세스를 만들면 시스템은 새로운 프로세스 커널 오브젝트와 스레드 커널 오브젝트를 생성 - 커널 오브젝트가 새롭게 생성되면 사용 카운트(usage count) 값이 1로 초기화 - CreateProcess 함수 반환 전, 프로세스 커널 오브젝트와 커널 오브젝트를 최대 접근 권한으로 한번 더 오픈 PROCESS_INFORMATION 구조체 .. 더보기
[펌] C/C++ Mixed Programming (name mangling) 아래 블로그를 통해 extern "C"의 정체를 알게 됐다. [펌] - http://yesarang.tistory.com/65 고절가주팁 두번째 시간입니다. 저번 글에서 말씀드린 대로 C/C++ 섞어 프로그래밍하기 기법에 대해 말씀 드리겠습니다. C/C++ 섞어 프로그래밍하기에 대해 글을 써 봐야겠다고 생각하게 된 건 다음 글 때문이었습니다. C에서 C++로 작성한 라이브러리 쓰기먼저 name mangling이라는것을 알아보았다. 하여튼 이넘때문에 C에서 C++에서 작성한 라이브러리를 사용하고 싶을때는 C++ 라이브러리를 작성할때 애초에 C에서 사용될수 있다는것을 염두해 두고 작성해야 한다는 말이다... 위 글을 읽고 났더니 옛날에 C/C++ 두 언어를 다 써서 개발을 해야 했던 기억이 나더군요. 그래서.. 더보기
프로세스 인스턴스 핸들 (Process Instance Handle) 인스턴스 핸들이란? 모든 실행 파일과 DLL 파일은 프로세스의 메모리 공간 상에 로드될 때 고유의 인스턴스 핸들을 할당 받는다. 이 인스턴스 핸들은 WinMain의 첫번째 매개변수인 hInstance를 통해 전달된다. 그리고 이 핸들 값은 다음과 같이 보통 리소스를 로드할 때 사용된다. HICON LoadIcon ( HINSTANCE hInstance, PCTSTR pszIcon); 많은 애플리케이션에서 WinMain의 hInstance 매개변수를 전역변수로 저장해 두고 사용한다. 아래와 같이 HMODULE형 인자를 요구하는 함수들이 있으며, HMODULE과 HINSTANCE는 완전 동일하다. (16비트 윈도우에서 구분되었지만 지금은 혼용) DWORD GetModuleFileName (HMODULE hI.. 더보기