반응형

char path_buffer[MAX_PATH];        // 전체 경로

char drive[MAX_DRIVE];               // 드라이브 명

char dir[MAX_DIR];                      // 디렉토리 경로

char fname[MAX_FNAME];           // 파일명

char ext[MAX_EXT];                    // 확장자 명

// 입력된 문자열로 부터 경로를 만든다.

_makepath(path_buffer, "c", \\temp\\1111\\, "filename_test", "txt");

printf("Path created with _makepath: %s\n\n", path_buffer);

// 입력한 전체 경로를 각각 쪼개서 저장한다.

_splitpath(path_buffer, drive, dir, fname, ext);

printf("Path extracted with _splitpath:\n");

printf(" Drive: %s\n", drive);

printf(" Dir: %s\n", dir);

printf(" Filename: %s\n", fname);

printf(" Ext: %s\n", ext);


Path created with _makepath: c:\temp\1111\filename_test.txt

Path extracted with _splitpath:

 Drive: c:

 Dir: \temp\1111\

 Filename: filename_test

 Ext: .txt

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

C언어 출력타입 %d, %f, %e, %o, %x, %u, %g ......  (0) 2013.12.11
정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
반응형

OnTimer 함수의 파라미터를 UINT -> UINT_PTR 변경하면 해결됨.

32비트 시스템과 64비트 시스템은 주소값의 범위가 다르기때문에 상호 호환이 가능한 코드를 사용하는 것이 좋다.

64비트에도 호환 가능한 UINT_PTR 로 변경하면 된다.


반응형
반응형

C언어 출력타입 %d, %f, %e, %o, %x, %u, %g ......


%d: 10진수(정수형)

%f: 실수형

%e: 지수형

%o: 8진수

%x: 16진수

%u: 부호없는 10진수

%g: 실수형 자동출력

%p: 포인터의 주소

%c: 하나의 문자로 출력

%s: 문자열

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

디렉토리 분리함수 _splitpath  (0) 2015.06.16
정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
반응형

IplImage 데이터 접근 (cvGetReal2D, cvSetReal2D) 하는 방법


int i, j;

int nVal;

IplImage * src = cvLoadImage("sample.jpg", CV_LOAD_IMAGE_GRAYSCALE);


for(i = 0; i<src->height; i++)

{

for(j = 0; j<src->width; j++)

{

// 예1) 데이터 가져오기

nVal = cvGetReal2D(src, i, j);


// 예2) 데이터 저장하기

double nVal2 = 255;

cvSetReal2D(src, i, j, nVal2);

}

}

반응형
반응형

IplImage 에 데이터를 배열에 memcpy를 이용해서 복사하는 방법


IplImage * src = cvLoadImage("sample.jpg", CV_LOAD_IMAGE_GRAYSCALE);

BYTE *buf;

buf = new BYTE[src->width*src->height];


예1) IplImage -> buffer

memcpy(buf, src->imageData, src->imageSize);


예2) buffer -> IplImage

memcpy(src->imagegData, buf, src->imageSize);

반응형
반응형

라이브러리 링크 에러 수정방법

msvcprt.lib(MSVCP90.dll) : error LNK2005: "public: __thiscall std:


프로젝트속성 -> 구성속성 -> C/C++ -> 코드 생성

런타임 라이브러리  -> 다중 스레드(/MD) 

반응형
반응형

풀 경고 메세지는 
warning MSB8012: TargetExt(.dll)이(가) Linker의 OutputFile 속성 값(....)과 일치하지 않습니다. 이를 수정하려면 $(OutDir), $(TargetName) 및 $(TargetExt) 속성 값이 %(Lib.OutputFile)에 지정된 값과 일치해야 합니다.

여기서 (....) 은 (.ocx) (.dll) 일 수 있다.

보통 VC6 에서 개발된 것을 VS2010 컴파일 할때 나는 warning 이다.



MSB8012 이 발생하는 이유

: Link.OutputFile 은 등록정보의 링커 -> 일반 -> 출력 파일 에 선언된 값으로 기본값으로 이 값은 $(TargetPath) 와 같은 $(OutDir)$(TargetName)$(TargetExt)이다. 그러나 이전버전에서 어플리케이션을 변환할 때 다른 고객들은 다른 방법으로 형식화된 값들을 가지고 있을 수 있기때문에, 변환을 위해 $(TargetName) 과 $(TargetExt) 가 가르키는 정확한 값을 밝힐 수 있도록 Link.OutputFile 을 분석할 수 있는 쉬운 방법이 없었음. 이 문제를 해결하기위해 MS는 변환을 하는동안 Linker.OutputFile 값을 보존하기로 결정한다.

: 변환후에 $(TargetName) 은 기본값으로 $(ProjectName) 으로 설정된다. $(TargetExt) 는 각 어플리케이션 형식에 맞는 기본값을 가짐. 즉 동적 라이브러리 *.dll, 정적 라이브러리 *.lib, 어플리케이션 *.exe과 같으며, Link.OutputFile 값은 그대로 보존된다. 이 때, Link.OutputFile 과 $(TargetPath) 가 같지 않으면 변환 로그에 경고 MSB8012 가 발생하게 된다.

MSB8012 은 아래와 같이 하면 해결될 수 있다.

먼저 프로젝트 ->속성 에서 링커 -> 일반 -> 출력 파일 을 확인 하여 출력파일 과 확장명이 뭔지 확인한다.

: $(OutDir), $(TargetName) 과 $(TargetExt) 는 "일반" 등록정보 페이지에서 "출력 디렉토리", "대상 이름", "대상 확장명" 로 확인할 수 있다. 위 출력파일과 다르다면 같게 수정하여 컴파일 해본다.


$(OutDir)$(TargetName)$(TargetExt) 


반응형
반응형

Adaboost 를 이용한 얼굴 검출과정을 동영상으로 만들어 놓은것.

http://vimeo.com/12774628

반응형
반응형

정적 바인딩

컴파일 시점에서 포인터 변수의 자료형에 의해서 호출될 함수가 결정되는 것.

 

동적 바인딩

컴파일할 때 호출할 멤버함수를 결정하지 않고, 프로그램이 실행되는 동안에 즉, 함수 호출이 실제로 일어나는 시점에서 멤버함수가 어떤 클래스의 멤버함수인지를 결정하도록 하는 것.

프로그램 실행 중에 포인터 변수가 가리키는 실체는 매번 변경되므로 동일한 포인터 변수로 함수를 호출하더라도 바인딩 되는 함수가 융통성 있게 바뀌어 호출되는 것.

 

virtual 키워드를 사용한 가상함수

C++에서 기본적으로 모든 함수가 정적 바인딩을 한다.

하지만 경우에 따라서 동적 바인딩이 필요한 경우에는 동적 바인딩을 하고자 하는 함수가 선언되어 있는 부모 클래스에 가서 함수를 선언(원형정의) 할 때 virtual 이라는 키워드를 함수의 선언 앞에 덧붙인다.

 

virtual void Prn();

 

virtual 키워드가 붙어서 동적 바인딩을 하는 함수를 가상함수라고 한다.

 

어떤 함수가 호출 될지 프로그램 실행 전에 결정 되는 것과 프로그램 실행 중에 호출 될 함수가 결정되는 것은 차이가 있다. 

C++ 에서는 가상 함수, 즉 dynamic binding을 통해 포인터가 가리키는 객체에 따라 각기 다른 동작을 할 수 있는 다형성을 구현할 수 있다.

 

* 정리

 - 정적 바인딩은 컴파일할 때 호출될 함수를 결정한다.

 - 모든 함수는 기본적으로 정적 바인딩을 한다.

 - 동적 바인딩은 호출될 함수를 결정한다.

 - 동적 바인딩을 위해서는 가상함수로 선언되어야 한다.

 - 가상함수는 기반클래스의 함수 선언문 맨 앞에 예약어 virtual를 덧붙인다.

 - 가상함수는 상속된다.

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

디렉토리 분리함수 _splitpath  (0) 2015.06.16
C언어 출력타입 %d, %f, %e, %o, %x, %u, %g ......  (0) 2013.12.11
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
반응형

상속(Inheritance)

 

객체 치향 언어의 대표적인 특징 중의 하나, 상속(Inheritance)

프로그램을 개발하다 보면 중복되는 내용이 많다.

이렇게 중복되는 코드를 단순히 복사해서 사용하는 것보다 이미 개발한 소스를 더 체계적으로 재활용하기 위한 방법.

 

상속이란 자식이 부모가 가지고 있는 재산이나 권력을 불려받는다는 의미

특정(자식) 클래스는 다른(부모) 클래스가 가지고 있는 모든 멤버변수나 멤버함수를 사용할 수 있다.

 

- 부모 클래스

Class Parent

{

public: void ParentPrn();

}

 

- 부모 클래스의 상속을 받는 자식 클래스

Class Child: public Parent

{

public: void ChildPrn();

}

 

protected 멤버의 사용

 

액세스 지정자 

자신의 클래스

 파생 클래스

클래스 외부 

 private

O

X

 protected

O

O

X

 public

O

 

private 는 파생클래스에서 접근하는 것을 허용하지 않는다.

public 는 파생클래스에서 접근하는 것을 허용하지만, 외부에서도 접근 가능하게 된다.

 

객체 지향 언어의 기본 특징인 캡슐화란 개념을 고수하면서 상속이 가능하도록 하기 위해서 제공되는 액세스 지정자가 바로 protected 이다. 부모가 되는 기반 클래스의 멤버변수들을 protected 로 지정해 두면 상속 가능하게 되어 파생 클래스에서 사용이 가능하지만 외부에서는 접근 불가능하게 된다.

 

오버라이딩과 오버로딩

오버라이딩과 오버로딩은 다형성을 지원하는 기술이라는 점에서는 매우 유사하다. 오버라이딩은 상속이란 개념에서 함수의 원형이 완전히 동일한 함수를 파행(하위) 클래스에서 사용하고자 할 때 새롭게 정의하는 것이다. 오버로딩은 동일한 이름을 다양한 일을 수행할 수 있도록 하기 위해서 함수의 원형을 달리해서 여러번 정의하는 것이다.

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

C언어 출력타입 %d, %f, %e, %o, %x, %u, %g ......  (0) 2013.12.11
정적 바인딩과 동적 바인딩  (0) 2013.07.08
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
객체지향 언어의 특징  (0) 2013.06.03

+ Recent posts