[C++] chilkatsoft

C/C++/VC++ / MFC 2014. 8. 10. 22:12

링크: http://www.chilkatsoft.com/refdoc/


'C/C++ > VC++ / MFC' 카테고리의 다른 글

[C++] Crypto++  (0) 2014.07.25
[WinDBG] 사용시 참고할만한 사이트  (0) 2014.01.03
[VC++] dependency walker  (0) 2013.08.07
[VC++] Device Info  (0) 2013.06.13
[VC++] Getting the PropertyData of ManagementObject in C++  (0) 2013.06.12
posted by 뚱2

[VC++] Device Info

C/C++/VC++ / MFC 2013. 6. 13. 11:07

장치관리자 Device Tree: http://www.codeproject.com/Articles/6597/CDeviceTree 

Enumerate Properties: http://www.codeproject.com/Articles/6866/Enumerate-Properties-of-an-Installed-Device

장치 열거하기 (한글) : http://blog.naver.com/cra2yboy?Redirect=Log&logNo=90165203152

posted by 뚱2

[C++] C++11

C/C++/VC++ / MFC 2013. 1. 29. 09:22

링크 : http://ko.wikipedia.org/wiki/C++11 

posted by 뚱2
요즘은 대부분 맥북만 사용합니다.
그런데 C, C++ 공부해보겠다고 윈도우를 다시 켜고 Visual Studio를 다시 설치하는게 너무 번거롭습니다.
간단한 콘솔 테스트용 프로그램은 XCode에서도 충분히 가능합니다.


1. 새로운 프로젝트를 생성합니다.



2. Mac OS X -> Command Line Tool을 선택합니다. 'Command Line Tool'이 콘솔 모드 입니다.



 3. Type을 지정하는데 전 C++로 했습니다. C가 C++의 서브셋이기 때문에 C++로 해도 C테스트가 가능합니다.
     (사실 정확한 범위의 서브셋은 아니지만 대부분 비슷하게 동작합니다.)

 
4. 세상에서 제일 유명한 테스트 'Hello World!' 콘솔창에 한번 출력해 봅니다.

 
posted by 뚱2

C++ 캐스트 연산자

C/C++/VC++ / MFC 2009. 9. 15. 14:50

C++로 프로그래밍을 할때도 C 캐스팅을 사용하고 있습니다.
이유는 C++ 캐스트 연산자 보다 타이핑 작성라인이 적어지고 익숙해서 편하기 때문이죠...
그렇지만 여러 자료나 많은 분들이 타입변환시 더 안정적인 C++ 캐스트 연산자를 사용하라고
조언하고 있습니다.


* static_cast<타입>(대상) : 논리적으로 변환 가능한 타입을 변환한다.
설명 : 포인터끼리 타입을 변환할 때는 상속 관계에 있는 포인터끼리만 변환이 허용되면 상속 관계가 아닌
         포인터끼리는 변환을 거부한다.

* dynamic_cast<타입>(대상)
설명 : 부모 타입의 포인터를 자식 타입의 포인터로 다운 캐스팅할 때 무조건 변환을 허용하지 않고
         안전하다고 판단될 때만 허용한다.
         다운 캐스팅 할때 static_casts는 무조건 변환을 허가하지만 dynamic_cast는 실행 중에 타입을
         점검하여 안전한 캐스팅만 허가한다.
         따라서 이 연산자가 변환 가능성을 판한하기 위해서는 실행 중에 객체의 실제 타입을 판별할 수 있어야 한다.

* const_cast<타입>(대상)
설명 : 포인터의 상수성만 변경하고 싶을 때 사용한다.

* reinterpret_cast<타입>(대상)
설명 : 임이의 포인터 타입끼리 변환을 허용하는 상당히 위험한 캐스트 연산자.
         이 연산자는 포인터 타입간의 변환이나 포인터와 수치형 데이터의 변환에만 사용하며 기본 타입들끼리의
         변환에는 사용할 수 없다.

static_cast 상속 관계의 클래스 포인터 및 레퍼런스. 기본 타입. 타입 체크 안함.
dynamic_cast 상속 관계의 클래스 포인터 및 레퍼런스. 타입 체크. RTTI 기능 필요
const_cast const. volatile 등의 속성 변경
reinterpret_cast 포인터끼리, 포인터와 수치형간의 변환  
참고 : 혼자 연구하는 C/C++ (김상형 저/와우북스)
posted by 뚱2


1. 제   목 :  Microsoft Visual C++ Object-Oriented Programming
2. 출판사 : 삼양출판사
3. 저   자 : 편집기획실
4. 가   격 : 16,000원
5. 난이도 : 초급 (★★☆☆☆)
6. 판   매 : 품  절
7. 평   가 : ★★★★★

    책 제목에 Visual C++이 포함되어 있어서 Visual C++ 툴과 관련이 있을것 같지만
    책의 내용은 대부분(90%) C++ OOP에 관한 내용입니다.
    C를 하고 OOP에 대해서 개념잡기 좋은 책 입니다.
    특히 C의 struct를 이용해서 C++ 클래스와 비슷하게 변경하는 방법(7.1)
    상속을 v-table과 함께 설명(8.3)함으로 해서 이해를 돕고 있습니다.
    저자는 편집기획실이라고 되어 있는데... 글 스타일이 전병선씨 스타일이 느껴집니다.(?)
    이건 100% 저만의 생각입니다. ^^; 저자는 분명 편집기획실로 되어 있습니다.
    다만 지금은 절판되어서 구입할수 없다는게 아쉽습니다.

ps. 2011-06-22 추가
     C를 배운 사람이 C++로 넘어가기 좋은 책 입니다. 다른 객체지향 책과 비교해서 좋은점은
     메모리와 연관해서 V-Table을 설명하는 부분에 있다고 할 수 있습니다. 
posted by 뚱2

PDA 업체에서 제공 하는 API를 사용하기 위해서 .Lib 을 링크하고 .h파일을 인클루드 했는데
위와 같은 에러가 발생했다.
구전(VC++ 6.0 이하)에서는 허용되었던 함수의 리턴값 생략이 VC++ 7.0이상으로 오면서
명시적으로 바뀌면서 생기는 오류이다.
컴파일 옵션을 바꿔서 해도 되지만... 그것보다는
함수를 명시적으로 바꾸는게 바른 방법인데...
이거... 내가 만든것도 아니고 .h 바꾸면 찝찝한데... ㅡㅡ;
그렇다고 컴파일 옵션을 바꾸자니 그건 더 찝찝하고...
결국 난 .h를 변경했다.
posted by 뚱2

C, C++는 파일을 작성할때는

보통 헤더파일에는 선언

구현파일에는 정의를 많이 넣는데요

템플릿을 사용할때는 헤더와 정의를 헤더파일에 넣어야 합니다.

이유인즉슨 컴파일 과정에서 템플릿의 정의부분이 필요하기 때문입니다.


ps. 한파일에 넣지 않고 하는 방법도 있다고 하는데 가장 손쉬은 방법은

      헤더에 다 작성하는 방법입니다.
posted by 뚱2

이번에 프로젝트를 하면서 전역객체를 사용할 일이 생겼었습니다.
전역객체로 진행하던중 이왕이면 디자인패턴을 사용해보자!!!
그래서 싱글턴을 이용해 보려고 합니다.

* Singleton Patterns ::
   해당 클래스의 인스턴스가 한개만 생성해서 그 인스턴스를 전역객체 처럼 어디서든지
   사용 할 수 있게 하는 디자인패턴입니다.

// Singleton.h
class CSingleton
{
private:
    static CSingleton * m_pUniqueInst;
    CSingleton();

public:
    ~CSingleton();
    static CSingleton & GetInstance();
};

// Singleton.cpp
#include "Singleton.h"

// static 초기화
CSingleton* CSingleton::m_pUniqueInst = NULL;

CSingleton::CSingleton()
{
}
CSingleton::~CSingleton()
{
    if (m_pUniqueInst)
        delete m_pUniqueInst;
}
CSingleton & CSingleton::GetInstance()
{
    if (m_pUniqueInst == NULL)
        m_pUniqueInst = new CSingleton;

    return *m_pUniqueInst;
}



간단하게 만들어본 싱클턴입니다.
GetInstance() 멤버 함수가 static으로 선언되어 있기 때문에 아무곳에서나
호출 가능합니다. 그리고 생성자가 private로 선언되어 있기때문에 CSingleton의
인스턴스를 만들려고 하면은 컴파일 에러가 발생합니다.


ps. 위 싱글턴은 싱글스레드 용입니다. 멀티스레드에서는 문제가 생길수 있습니다.

posted by 뚱2