달력

32024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
출처 : http://icartsh.tistory.com/
출처 :
http://msdn.microsoft.com/ko-kr/library/6wtdswk0(v=VS.100).aspx
http://msdn.microsoft.com/ko-kr/library/abx4dbyh(v=VS.100).aspx

error LNK2005: _printf이(가) MSVCRTD.lib(MSVCR100D.dll)에 이미 정의되어 있습니다.
이 오류는
프로젝트 속성에 C/C++ -> 코드 생성-> 런타임 라이브러리 : 다중 스레드 디버그 DLL(/MDd) 때문에 발생한다고 한다.
외부 라이브러리가 MT(d)로 컴파일 되어있지만 내가 사용하는 프로젝트가 MD(d)로 되어 있으면 발생는 것으로
옵션을 MT(d)나 MD(d)로 모두 통일 하면 되지만
라이브러리의 소스가 존재하지 않을때에는
아래와 같이 해야한다.

사용할 런타임 라이브러리 무시해야 하는 라이브러리
단일 스레드(libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
다중 스레드(libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
DLL을 사용하는 다중 스레드(msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
디버그 단일 스레드(libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
디버그 다중 스레드(libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
DLL을 사용하는 디버그 다중 스레드(msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib


프로젝트 속성->링크->입력->즉정 기본 라이브러리 무시 : LIBCMTD.LIB
Posted by sukay
|

시간 측정 함수

C++ 2011. 10. 28. 05:54

clock_t start = clock();
clock_t end = clock();
cout << "처리 시간 : " << end - start << " 밀리세컨드" << endl;
Posted by sukay
|
"C:\\asdf\\asdf\\test.jpg"라는 경로가 있을때
파일 이름인 test.jpg만을 얻고자 할때
CString 클래스의 reversfind와 find 함수를 사용하면 쉽게 가져 올 수 있다.

CString test;
test = Path;
int flag = test.Find('\\');

이렇게 되면 flag에 가장 왼쪽  \의 자리값을 가져오고
test.RversFind함수를 사용하면 오른쪽 끝에 있는 \의 자리값을 가져온다

 

Posted by sukay
|


동적할당하는 함수 구현

** (x)
**& (o)
void alloc(int **&src,int w,int h);
void main(){
int **src;

alloc(src,w,h);
}


void alloc(int **&src,int w,int h){

int i,j;

src = new int*[h];

for(i=0;i<h;i++){

src[i] = new int[w];

}

}

Posted by sukay
|

클래스간 포인터

C++ 2011. 3. 31. 10:56
CTestApp, CMainFrame, CTestDoc, CTestView

◎ CTestApp에서
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
CTestDoc* pDoc = (CTestDoc*)((CMainFrame*)AfxGetMainWnd())->GetActiveDocument();
CTestView* pView = (CTestView*)((CMainFrame*)AfxGetMainWnd())->GetActiveView();

◎ CMainFrame에서
CTestApp* pApp = (CTestApp*)AfxGetApp();
CTestDoc* pDoc = (CTestDoc*)GetActiveDocument();
CTestView* pView = (CTestView*)GetActiveView();

◎ CTestDoc에서
CTestApp* pApp = (CTestApp*)AfxGetApp();
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
CTestView* pView = (CTestView*)((CMainFrame*)AfxGetMainWnd())->GetActiveView();

◎ CTestView에서
CTestApp* pApp = (CTestApp*)AfxGetApp();
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
            or (CMainFrame*)GetParent();
CTestDoc* pDoc = (CTestDoc*)((CMainFrame*)AfxGetMainWnd())->GetActiveDocument();
         or (CTestDoc*)GetDocument();
Posted by sukay
|

동적할당

C++ 2011. 3. 9. 20:51

동적할당은 사용자가 필요한 만큼 할당 받아 사용하는 방법이다.
물론 자주 사용 했고 잘 쓰고있다.

여기에 적을 내용은
프로그램 구현 중 할당되었냐 안되었냐를 판단해야 하는 경우가 있다.
물론 예외처리로 필요한 부분이다.

할당에 대한 예외처리를 하게되는경우 처음 포인터를 선언하는 부분에서
초기화를 해주어야 한다.
Ex)
double *p;
if(p)
 printf("ok");

이것은 메모리 에러가 발생하고 접근이 불가능하다
다음은 예제 소스이며 간단히 사용이 가능하다.
Ex)
double *p = NULL;
 if(p)
  printf("No");
 p = new double[10];//동적할당
 if(p)
  printf("yes");
 delete[] p;//할당해제
 if(p)
  printf("2No");
Posted by sukay
|

비쥬얼 스튜디오에서
클래스의 멤버함수가 정의된 부분으로 이동할때
가끔 선언된 부분으로 이동하게 되는 오류가 발생하며


이런 경우 프로젝트 폴더의 ncb 파일을 삭제한뒤 비쥬얼스튜디오를 다시 실행하면
정상적으로 이동이 되는데 이것은 ncb파일이 프로젝트의 전체 소스를 관리하기 때문에
비쥬얼 스튜디오 실행시 ncb파일이 없다면 다시 생성을 해주어 정상적인 사용이 가능하게 해줍니다.
Posted by sukay
|

WM_USER 메시지

C++ 2011. 2. 16. 16:21
출처 : http://blog.naver.com/intencelove?Redirect=Log&logNo=20122584833
윈도우 기반 프로그래밍에서 가장 기본적인 개념이 메시지 처리이며, 윈도우 프로그램에서는 사용자에게 엄청난 크기의 메시지 영역을 제공한다.

사용자 자신의 메시지
#define _MESSAGE1 (WM_USER+1)

WM_MESSAGE를 자주 사용하는 경우 UserMessage.h를 만들어 사용한다.

메시지 보내기
PostMessage(_MESSAGE);  //메시지 큐에 넣기
SendMessage(_MESSAGE);  //ㅐㄴ들러(함수)를 마칠때까지 기다림
위 함수는 CWnd 클래스의 멤버함수이며, 위 함수는 자신의 윈도우에서만 처리가 된다.
브로드 캐스팅을 하는 방법은 WinAPI를 이용하여 처리하며
::PostMessage(HWND _BROADCAST, _MESSAGE, Parameter1, Parameter2);
::SendMessage(HWND _BROADCAST, _MESSAGE, Parameter1, Parameter2);
자신의 윈도우 뿐 아니라 다른 모든 윈도우에 메시지가 전달된다.

메시지 맵핑
BEGIN_MESSAGE_MAP(CM?ywindowClass, CMyParentWindowClass)
//{{AFX_MSG_MAP(CMyWindowClass)
On_MESSAGE(_MESSAGE,OnMyMessageHandler)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
OnMyMessageHnadler는 사용자 정의 메시지가 도착 할때 수행되는 함수의 이름이다.

함수 정의
LRESULT CMyWindowClass::OnMyMessageHandler(WPARAM wParam,LPARAM lParam){}

함수 선언
afx_msg LRESULT OnMyMessageHandler(WPARAM wParam, LPARAM lParam);

afx_msg(Message Handler Function) : 윈도우로부터 어플리케이션에 메시지가 저달될 때 해당 메시지를 처리하는 멤버 함수, 함수이름엔 WM_대신 On, 함수 선언시 afx_msg를 붙인다.

Posted by sukay
|

CSocket 은 내부적으로 윈도를 하나 생성 하여 이벤트를 처리하는것으로 알고 있습니다. 이를 위해선 MFC 에서 사용하는 여러가지 글로벌 변수들이 초기화 되어야 하는데 이게 제대로 안되서 문제가 생기는 것 같네요.. 먼저 프로그램 시작시에 AfxWinInit() 함수를 호출한다.


if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

    cerr << "MFC failed to initialize!" << endl; 
    return 1;
}

 
Posted by sukay
|

#pragma once

C++ 2011. 2. 16. 13:38
하나의 헤더파일이 여러군데 include 되어야하는 경우 출돌을 피하기 위하여
include 되는 헤더파일의 최상단에 명시한다.

Posted by sukay
|