본문 바로가기
C++ dynamic_downcast MFC 클래스 type casting 예제 기본적인 자료형 변환 형태는 DYNAMIC_DOWNCAST (Class, Pointer)입니다. 클래스 등 형 변환이 정상적으로 이루어질 경우 해당 오브젝트의 포인터를 반환하고, 그렇지 않다면 NULL을 반환합니다. 아래는 간단한 type casting 예제 3개입니다. C++ 캐스팅 자료형 변환 예 1) 123CFrameWnd* pParent;CWnd* pNaturalParent = pPrintView->GetParentFrame();pParent = DYNAMIC_DOWNCAST(CFrameWnd, pNaturalParent);cs C++ 캐스팅 자료형 변환 예 2) 1234567891011121314151617181920class X:public CObject{ public: int x; DECLA.. 2019. 4. 7.
[비주얼스튜디오] C++ 프로젝트 Import /MP 빌드 속도 사용 [비주얼스튜디오] C++ 프로젝트 Import, /MP 사용 방법 비주얼 스튜디오 1. /MP 사용 시 발생하는 에러 메시지 [비주얼 스튜디오 에러 메시지] error C2813: /MP를 지정하면 #import를 사용할 수 없습니다. msado15.tlh(5025): fatal error C1083: 포함 파일을 열 수 없습니다. "....\msado15.tli': No such file or directory" 실제로 외부 DLL 참조를 Include로 바꾸실 의도로 이 포스팅을 보신다면, Import 상태로 디버깅하신 후, Debug 폴더의 .tli, .tlh 파일은 따로 복사하세요. 비주얼 스튜디오 2. 프로젝트 옵션 설정 비주얼 스튜디오 3. .tlh, .tli 복사 Debug 폴더의 두 파일을.. 2018. 12. 19.
VC++ PostMessage 예제, mfc 화면 갱신 깜박임 사용법 VC++ PostMessage 예제, mfc 화면 갱신 깜박임 사용법 PostMessage 사용 시 주의 PostMessage 는 SendMessage 와 달리 프로그램이 메시지를 빈번히 처리해서 메시지큐가 full인 경우에는 처리되지 않는다. 따라서 중요한 처리의 경우는 리턴값을 확인해야 한다. 화면 갱신 시 깜박임 없애기 클라이언트 영역에 그래픽 작업이나 컨트롤을 올릴 때 화면이 깜박이는 문제를 없에려면, (1) Memory DC를 사용한다.화면에 직접 그릴 경우는 배경 칠하고 위에 다른 것을 그리면 이것이 눈에 띄게 된다. CreateCompatibleDC를 이용해 메모리 DC에 모두 그려준 다음 BitBlt를 이용해 한꺼번에 화면에 복사해 주면 깜박임이 없어진다. (2) OnEraseBkgnd (.. 2018. 9. 21.
VC++ 개발자도 잘 몰랐던 코딩 팁 9가지 (좋은 코드, 가독성 상승 습관) VC++ 개발자도 잘 몰랐던 코딩 팁 9가지 (좋은 코드, 가독성 상승 습관) static 라이브러리 작성 시 주의사항 static 라이브러리를 작성해 application에 링크하려다 보면 LIBCD.lib 등의 링크 에러가 발생합니다. 이것은 static library 위저드와 application 위저드가 Code Generation 옵션을 서로 다르게 생성하기 때문입니다. 해결 방법Project Settings --> C/C++ --> Code Generation --> Use run-time library -->Debug Multithreaded XXX 식으로 application에 사용된 속성과 맞춰줘야 합니다. 마찬가지로 라이브러리를 사용하는 프로그램 컴파일 시 already defined... 2018. 2. 20.
[C++ 11] Hash Map : HASH MAP Header not found [C++ 11] Hash Map : HASH MAP Header not found C++11에서 추가된 Hash map(해시맵)을 사용하려 시도하면 제목처럼 에러가 발생합니다. 좀 아쉬운 게 ext 폴더 내부로 이동해 놓아서 일반적인 C++ 11을 사용하는 방법으론 Hash Map(해시맵)을 못쓴다는 겁니다. 추후에 지원이 될련진 모르겠네요. 아래처럼 소스 코드 단 두 줄만 추가하면 hash_map 사용이 가능합니다. 123#include using namespace __gnu_cxx;cs [C++ 11] Hash Map : HASH MAP Header not found 2017. 12. 7.
[C++ 최적화] Const, 가상함수, 변수 등으로 속도 최적화 [C++ 최적화] Const, 가상함수, 변수 등으로 속도 최적화 C++ 최적화 : 속도 최적화(Speed Optimizations)모든 애플리케이션은 CPU 사이클이 시간 때문에 중요하다. 이 포스팅에선 C++ 최적화 중 속도를 위한 몇 가지 지침을 제시한다. C++ 최적화 : 긴 인수 리스트를 압축하기 위해 클래스 사용함수의 인수 리스트가 길 때, 함수 호출 오버헤드가 증가한다. 런타임 시스템은 스택을 인수들의 값으로 초기화해야 한다. 당연히 이 동작은 인수가 많을수록 오래 걸려 C++ 최적화에 방해된다. 예를 들어, 아래 함수를 100,000,000번 수행하면 내 컴퓨터에서는 평균 8.5초가 소요된다. 123456void retrieve(const string& title, //5 arguments.. 2017. 12. 1.
[배열 초기화 C++] static const char 초기화 [배열 초기화 C++] static const char 초기화 배열 초기화하는 방법은 간단합니다. 12345// headerstatic const char kEXAM[]; // cppconst char ClassName::kEXAM[] = { 'E', 'X', 'A', 'M', '0', '1' };cs 헤더 파일에 상수화 시킬 변수를 선언만 해주세요.이때, 배열 초기화 대상의 배열의 크기를 미리 지정해도 됩니다. 12345// headerstatic const char kEXAM[6]; // cppconst char ClassName::kEXAM[6] = { 'E', 'X', 'A', 'M', '0', '1' };cs 저라면, 아직 개발 단계고 배열의 크기가 확정되지 않았다면, 배열 초기화를 위해 크기는.. 2017. 11. 23.
인라인함수로 프로그램 코드 최적화 (C++ inline함수) 인라인함수로 프로그램 코드 최적화 (C++ inline함수) C++ 코드 최적화를 할 때 프로그램 코드엔 인라인함수가 있어야 합니다. C++ 객체지향 프로그래밍에 인라인함수가 갖는 장점을 적극적으로 활용하기 위함이죠. 이 포스트에선 함수 호출할 때 발생하는 오버헤드를 해결하는 인라인함수를 설명합니다. 프로그램 코드 최적화로 실행 속도를 개선하려면 반드시 인라인함수 사용이 필요합니다. 10.4 인라인함수들(Inline Functions) 인라인함수들은 함수 호출 때문에 초래되는 오버헤드를 제거할 수 있으며 여전히 보통의 함수들의 장점들을 제공한다. 그러나, 인라인화 하는 것은 만병통치약이 아니다. 어떤 상황들에서, 그것은 프로그램의 성능을 저하할 수도 있다. 이러한 특징을 현명하게 사용하는 것이 중요하다... 2017. 9. 8.
C++/CLI 예제, 프로젝트 생성, Hello World 출력 C++/CLI 예제, 프로젝트 생성, Hello World 출력 이론 부분은 생략하고 간략하게 C++/CLI 예제 프로젝트 생성하는 방법을 다룹니다. 비주얼 스튜디오 2015 기준으로 "템플릿 - 다른 언어 - Visual C++ - CLR - CLR 콘솔 응용 프로그램"을 선택합니다. 이렇게 프로젝트를 생성하면 아래처럼 솔루션 탐색기를 통해 전체 구조를 알 수 있습니다. C++/CLI 예제의 시작이라고도 할 수 있죠. 그리고 아래처럼 코드를 구성해서 C++/CLI 예제의 목표인 Hello World를 콘솔로 찍어 봅니다. 123456789101112#include "stdafx.h"#include using namespace System; int main(array ^args){ Console::Wri.. 2017. 3. 3.
C++ 싱글톤 패턴 + Friend 키워드 예제, 디자인패턴 사용 방법 C++ 싱글톤 패턴 + Friend 키워드 예제, 디자인패턴 사용 방법 상황에 따라 전역 변수의 개념과 비슷(?)한 무언가가 필요해지기 마련입니다. 그래서 주로 선택하는 것이 C++ 싱글톤 패턴 입니다. (Singleton Pattern, 싱글턴 패턴) 전역이란 개념 자체를 아예 쓰지 않으려 하면 쓸데없이 코드가 길어지고, 불필요한 파일들이 생성되는 일도 종종 벌어집니다. 설계를 제대로 하면 되지 않느냐 반문하신다면........ 지금 당장 답변할만한 건더기는 없네요. 어찌 되었건, C++ 싱글톤 패턴 사용하게 된다면 friend 키워드를 사용해서, 최소한 데이터의 변경만큼은 제대로 제어해줄 필요가 있습니다. 그래야만 전역 변수가 갖는 동시성, 커플링 문제 등에 대한 최소한의 대처가 가능합니다. ◆ 싱글.. 2017. 2. 25.
[MFC 기초 강좌] C++ 프로그래머 11개 코딩 프로그래밍 팁 [MFC 기초 강좌] C++ 프로그래머 11개 코딩 프로그래밍 팁 1. Parameter Default 1234int parameterDef(int nNum = 5){ return nNum;}cs 위와 같은 함수가 있을 때, parameterDef()와 parameterDef(5)는 같은 의미. 2. 메모리 공간 영역 코드 영역 - 사용자가 코딩한 내용이 저장데이터 영역 - 프로그램 종료 이전까지 지워지지 않을 데이터가 저장스택 영역 - 매개변수, 지역변수 등 유동적인 변화가 발생한 것들을 다루는 영역힙 영역 - 원하는 시점에 메모리를 할당/해제할 수 있는 영역 3. Const 함수에서도 const를 사용해서 참조자를 보다 완벽하게 사용할 수 있습니다. 12345int RefFunc(const int &.. 2017. 2. 15.
C++ 메모리 해제와 접근 할당 에러 9가지 적절한 malloc 사용법 C++ 메모리 해제 접근 할당 에러 (malloc, delete, free) C++ 메모리 에러 종류1. 메모리 해제 에러메모리 릭시간이 갈수록 메모리 사용량이 계속 증가한다. 시간이 갈수록 프로세스가 느리게 동작한다.종국적으로 『메모리가 부족』하여 프로그램의 작업과 시스템 콜들이 실패한다. 123456void memoryLeak(){ int* p = new int[1000]; return; // 버그! p를 해제하지 않음}cs 메모리 할당, 해제의 잘못된 매칭 보통 프로그램을 즉시 크래시시키지 않는다. 어떤 플랫폼에서는 메모리를 손상할 수 있고 나중에 프로그램 크래시(세그먼테이션 오류)로 나타난다. 1234567891011void mismatchedFree(){ int* p1 = (int*)malloc.. 2017. 2. 5.