반응형

HINSTANCE hInstance = AfxGetInstanceHandle();

// 리소스 아이디, 리소스 형식

HRSRC hRsrc = FindResource(hInstance, MAKEINTRESOURCE(IDR_FILE1), _T("FILE")); 

HANDLE hRes = LoadResource(hInstance, hRsrc);

LPSTR lpRes = (LPSTR)LockResource(hRes);

CFile fp;

// 파일명 입력

fp.Open(_T("c:/file.bin"), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary | CFile::shareDenyNone)

// 리소스 파일 저장

fp.Write(lpRes, SizeofResource(hInstance, hRsrc)); 

fp.Close();

 

반응형
반응형

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

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

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


반응형
반응형

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

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) 


반응형
반응형

TCHAR path[_MAX_PATH];

GetModuleFileName(NULL, path, sizeof(path));


CString strPath = path;  

int i = strPath.ReverseFind('\\');      // 실행파일 이름을 지우기 위해서 왼쪽에 있는 '/'를 찾는다.

strPath = strPath.Left(i);                    // 뒤에 있는 현재 실행파일 이름을 지운다.

반응형
반응형

Visual Studio 2008 CMFCShellTreeCtrl 사용하기

 - 기본적으로 제공해 주는 CTreeCtrl 은 이것저것 설정해줘야 하는 것이 많은데에 비해

   CMFCShellTreeCtrl 을 사용하면 윈도우 탐색기를 쉽게 구현가능하다.

   근데 이건 Visual Studio 2008 SP1 이 설치되어있어야 한다.

 - 사용법에 대해 잘 나타나있지 않아서 엄청난 삽질을 하고 있었는데, 드디어 해결!!


사용법은 간단하다. 

다이얼로그 기반일 경우: TreeControl 을 하면에 끌어다 놓고 아래처럼 사용하면 된다.

**Dlg.h

CMFCShellTreeCtrl m_cTreeCtrl;


**Dlg.cpp

OninitDialog() 함수안에

m_cTreeCtrl.SelectIem(m_cTreeCtrl.GetRootItem();

m_cTreeCtrl.SelectItem(L"C:\\");


이렇게 만 쓰면된다!!! 일줄 알았다. 근데 계속 에러가 나와서 인터넷 검색을 엄청해서 결국 해결했다.

에러가 난 이유는 초기화를 하지 않아서 이다.

초기화는 **App 에서 하면 떙~ 이렇게 간단한걸 삽질을 하다니...

모르는게 너무 많다...


**App 클래스 안에

InitInstance() 안에

InitShellManager(); 


요것만 써주면 오류없이 해결이 가능하다. 


반응형
반응형

CWinApp 클래스의 구조


프로그램이 시작되면 CWinApp 클래스의 인스턴스가 생성되고,

세개의 멤버 함수가 차례로 호출되는 구조롤 만들어져있다.

   InitInstance();

   Run();

   ExitInstance();


Run 함수는 무한루프를 돌면서 메시지를 처리하는 기능을 하고, 프로그램을 종료하라는 메시지인 WM_QUIT 메시지를 만나면 무한루프에서 빠져 나온다.

프로그램이 실행되면 

① InitInstance 함수가 잠깐 실행되고, 

② Run 함수에서 계속 머무르고 있다가, 프로그램이 끝나기 직전에 

③ ExitInstance 함수가 잠깐 실행되고 프로그램이 종료되는 구조로 되어 있다.

반응형

+ Recent posts