프로젝트명.sln 파일을 텍스트 에디터로 연후.


------------------------------------------------------------------------------------


Microsoft Visual Studio Solution File, Format Version 10.00 <- Microsoft Visual Studio Solution File, Format Version   9.00 으로 변경


# Visual Studio 2008 <- # Visual Studio 2005 으로 변경


------------------------------------------------------------------------------------


프로젝트명.csproj 파일을 동일하게 텍스트 에디터로 연후


<Reference Include="System.Core">
   <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>


삭제


하단에 Project="$(MSBuildToolsPath) -> Project="$(MSBuildBinPath) 으로 변경


------------------------------------------------------------------------------------

'Programming > tool' 카테고리의 다른 글

01) XP에 DNS 설치  (0) 2010.03.19
IIS, FTP 설치  (0) 2010.03.19
Visual Studio 2008 설정  (0) 2010.03.18
NSIS 값 읽어오기  (0) 2010.03.18
NSIS 기초지식  (0) 2010.03.18

Create a Visual C++ Wizard for Visual Studio 2005

  • http://www.codeguru.com/cpp/v-s/devstudio_macros/customappwizards/article.php/c12775__1/

    Visual Studio C++ Project Templete 만들기 

  • Creating the Project

    To create a new wizard project, go to File > New > Project and select Visual C++, and then from the list of available templates customwiz. Let's call this project "DummyWin32Wizard", because after all, that's exactly what it is. You will be asked to select the settings for this project. First, put "DummyWin32Wizard" in the "Wizard Friendly Name" edit, check the "User Interface" checkbox, and set the number of pages of the wizard to 1, because that's all what we'll need.

    When the project is created, it will have several created files that you can see in the following picture. The most important ones are described here:

    get_image.png 

'scrap' 카테고리의 다른 글

명령어5  (0) 2010.03.18
명령어6  (0) 2010.03.18
LinkError 추적하기  (0) 2010.03.18
SVN 사이트  (0) 2010.03.18
Visual Studio 단축키  (0) 2010.03.18

짜증나는 워닝과 에러 중에,헤더파일 순서에 따라 발생하는 워닝/에러가 있습니다.특히 링크타임에 나는 에러는 네이밍 모양새가 재밌게 생겨먹지 않은 스타일로 생기는 데다가 링커가 별로 힌트를 주지 않아서 짜증이 나기도 합니다.예를 들면 아래와 같은 겁니다.


1>Generating Code...

1>Compiling resources...

1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

1>Copyright (C) Microsoft Corporation. All rights reserved.

1>Compiling manifest to resources...

1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

1>Copyright (C) Microsoft Corporation. All rights reserved.

1>Linking...

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)


위 예는 MFC프로젝트에서 모든 파일에서 MFC헤더를 다른 헤더 보다 먼저 선언해야 하는데(대부분 stdafx.h를 가장 상위에 선언합니다.), MFC프로젝트에서 사용하던 파일을 Import하고 컴파일 하는 순간 발생했습니다.


이런 에러의 경우 대처법은 의외로 간단 합니다.일단 똑똑고 기억력 좋으신 분들은 자기가 했던 행위들의 콜스택을 하나하나 거슬러 올라가시면서 대처 하는법이 있고,이게 가장 비용대비 시간단축 효가가 가장 좋습니다.


순간 욱해서 콜스택 거슬러 올라가기 힘드신 (저 같은;;)분들은 아래처럼 대처 하시면 됩니다.먼저 링커 옵션에 아래 옵션을 추가 합니다.


/verbose:lib


http://blogfiles4.naver.net/data42/2009/3/23/163/verbose_drvoss.jpg



그리고 다시 빌드 하면 링킹타임에 library를 스캔하는 리스트가 아래와 같이 output창에 나오게 됩니다.


1>Generating Code...

1>Compiling resources...

1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

1>Copyright (C) Microsoft Corporation. All rights reserved.

1>Compiling manifest to resources...

1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

1>Copyright (C) Microsoft Corporation. All rights reserved.

1>Linking...

1>Searching libraries

1>   Searching C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\DelayImp.lib:

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:

1>   Searching C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\LIBCMTD.lib:

1>   Searching C:\Program Files\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:

1>   Searching C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib\uafxcwd.lib:

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)

1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:

1>   Searching C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:


윗 예에서 uafxcwd.lib를 링크 할 때,링크에러가 났고,에러를 유발한 유력한 용의자는 uuid.lib입니다.왜냐면,계속 다른 애들은 디폴트 경로에서 링크되는데 uuid.lib sdk에서 링크 되었고, MFC에서 new를 재정의 하기 때문에,이전에 new가 정의되어 있는 파일이 링크되면 안됩니다.여기서 “stdafx.h”파일을 추가 하는 것을 잊었구나 하는 생각이 듭니다.


/verbose옵션을 써보지 않으신 분들은 한번 넣고 컴파일을 해보시면 쓰잘떼기 없는 정보까지 주르륵 나와서 놀라실 껍니다.여러가지 링킹 타임에 하는 작업 정보를 자세히 알려주는 것을 알 수 있습니다.윗예의 :lib처럼 뒷부분에 세부 옵션을 붙여 보기 좋게 정보를 추출하는 작업이 익숙해 지면 일반적인 컴파일시 정보를 잘 제공해주지 않는 링킹 타임시 발생하는 에러에 정보를 얻어 디버깅 작업 시간을 단축 시킬 수 있습니다.

'scrap' 카테고리의 다른 글

명령어6  (0) 2010.03.18
C++ Project Templete Create  (0) 2010.03.18
SVN 사이트  (0) 2010.03.18
Visual Studio 단축키  (0) 2010.03.18
증분링크  (0) 2010.03.18

Visual Studio .NET 단축키

  • 웹사이트 이름을 적고 링크를 걸어 보세요.

    [출처] Visual Studio 단축키 활용하기 (HGC 홍익대학교 게임학부 클라이언트) |작성자 돌돌이.



  • Ctrl + F : 찾기
    Ctrl + Shift + F : 파일에서 찾기
    Ctrl + Space : NameSpace
    Ctrl + Shift + Space : Parameter
    Home : 커서가 위치한 줄의 코드 시작 위치로
    End : 커서가 위치한 줄의 코드 끝 위치로
    Shift + Home : 커서가 위치한 줄 모두 블록
    Shift + End : 커서가 위치한 줄 모두 블록
    Shift + ← or → or ↑ or ↓ : 블록 잡기
    드래그 + Alt : 현재 커서 위치부터 움직인 커서 위치까지 블록
    Ctrl + ←, → : 구분단위로 커서 이동
    Ctrl + Shift + ← or → : 구분단위로 블록
    Ctrl + M, L : 전체 + 버튼으로 만들기
    Ctrl + M, M : 커서 위치가 속한 곳을 + 버튼으로 만들기
    Ctrl + M, L : 선택된 곳을 +버튼으로 만들기
    Shift + Delete : 커서가 위치한 줄 삭제
    Ctrl + L : 커서가 위치한 줄 삭제, 선택된 줄단위로 삭제
    Ctrl + K, C : 선택 영역 주석 달기
    Ctrl + K, U : 선택 영역 주석 없애기
     
    F7 : 빌드
    Ctrl + Alt + F7 : 전체 다시 빌드
    F5 : 빌드 + 실행
    Ctrl + F5 : 빌드 없이 실행
    F9 : 브레이크 포인트 설정
    F10 : 줄단위 실행
    F11 : 코드 단위 실행
    F12 : 정의로 이동
    Ctrl + '-'키 : 이전 커서 위치로
    Ctrl + Shift + '-'키 : 다음 커서 위치로
    Ctrl + F2 : 커서가 위치한 줄에 책갈피 설정
    F2 : 다음 설정된 책갈피로 커서 이동
    Ctrl + Shift + F2 : 설정된 책갈피 모두 삭제
    Ctrl + F10 : 커서 위치까지 실행
    Alt + F8 : 선택 영역 코드 탭 정리하기
     
    마우스 우클릭 - Find All Refrence : 모든참조 찾기
    Alt + P + P : 프로젝트 속성

     


    편집 관련 단축키

    편집 관련 단축키들은 익혀두면 다른 문서를 작성 할때도 많이 도움이 될 것이다.

    문서 편집 관련 단축키들은 사용하면 사용할 수록 코딩 속도가 빨라진다.



    Ctrl + F : 찾기

    중요도 : ★★★☆☆

    활용 : 특정 클래스, 함수, 변수 등을 검색한다.





    Ctrl + Shift + F : 파일에서 찾기

    중요도 : ★☆☆☆☆

    활용 : 특정 클래스, 함수, 변수 등을 검색한다. 현제 프로젝트가 아닌 파일에서도 찾을 수 있다.





    Ctrl + Space : NameSpace

    중요도 : ★★★★★

    활용 : 현재 접근 가능한 클래스명, 함수명, DEFINE문 등의 목록을 보여준다.

             코드를 치는 도중 Ctrl + Space를 누르면 이전에 선언된 것과 

             가까운 목록을 보여주며 선택을 함으로써 쉽게 완성이 가능하다.

             목록이 하나뿐이라면 그것으로 자동 완성 해준다.





    Ctrl + Shift + Space : Parameter

    중요도 : ★★★★★

    활용 : 커서가 클래스명의 뒤에 있을 때 접근가능한 변수, 함수 목록을 보여준다.

             코드를 치는 도중 Ctrl + Shift + Space를 누르면 이전에 선언된 것과

             가까운 목록을 보여주며 선택을 함으로써 쉽게 완성이 가능하다.

             목록이 하나뿐이라면 그것으로 자동 완성 해준다.





    Home : 커서가 위치한 줄의 코드 시작 위치로

    중요도 : ★★★★★

    활용 : 커서의 위치와 관계없이 해당 줄의 코드 시작위치로 커서를 옮긴다.

             블록을 잡기 위해서, 커서의 빠른 이동 등에 많이 사용된다.





    End : 커서가 위치한 줄의 코드 끝 위치로

    중요도 : ★★★★★

    활용 : 커서의 위치와 관계없이 해당 줄의 코드 마지막위치로 커서를 옮긴다.





    Shift + Home : 커서가 위치한 줄 모두 블록

    Shift + End : 커서가 위치한 줄 모두 블록

    중요도 : ★★★★★

    활용 : 커서 위치가 가장 앞에 있다면 Shift + End를 이용해 그 줄을 블록하고 

             커서 위치가 가장 뒤에 있다면 Shift + Home를 이용해 그 줄을 블록한다.





    Shift + ← or → or ↑ or ↓ : 블록 잡기

    중요도 : ★★★★☆

    활용 : 여러 줄을 블록할 때 많이 사용한다.





    드래그 + Alt : 현재 커서 위치부터 움직인 커서 위치까지 블록

    중요도 : ★★★★☆

    활용 : 마우스 드래그 중 Alt를 누르면 드래그하는 영역을 사각형으로 봤을 때 그 영역을 블록하게 된다.

             특정 부분을 선택하고 싶거나, 탭을 먹이고 싶을 때 많이 사용된다.





    Ctrl + ←, → : 구분단위로 커서 이동

    중요도 : ★☆☆☆☆

    활용 : 현재 줄에서 커서를 좌우로 이동할 때 변수, 공백, 탭, 등의 구분단위로 이동하게된다.

             보다 빠른 커서위치를 조정하고, 블록할 때 사용된다.





    Ctrl + Shift + ← or → : 구분단위로 블록

    중요도 : ★☆☆☆☆

    활용 : 현재 줄에서 블록을 할 때 변수, 공백, 탭 등의 구분단위로 블록영역을 설정한다.

             보다 빠르게 블록 영역을 설정할 때 편리하다.





    Ctrl + M, L : 전체 + 버튼으로 만들기

    중요도 : ★★★☆☆

    활용 : 현재 소스 전체를 {}영역 별로 +버튼으로 만들어준다.

             +버튼은 소스가 삭제되는 것은아니라 감춰두는 것으로 볼 수 있다.

             소스가 길어 함수 정의나 클래스 정의 부분을 빨리 찾고 싶을 때 많이 사용된다.





    Ctrl + M, M : 커서 위치가 속한 곳을 + 버튼으로 만들기

    중요도 : ★★☆☆☆

    활용 : 커서의 위치를 {}단위로 판단하여 커서가 속한 곳을 +버튼으로 만든다.





    Ctrl + M, L : 선택된 곳을 +버튼으로 만들기

    중요도 : ★★☆☆☆

    활용 : 블록을 선택된 영역을 +버튼으로 만든다.





    Shift + Delete : 커서가 위치한 줄 삭제

    중요도 : ★★★★☆

    활용 : 커서가 위치한 줄을 삭제한다.

             빠르게 현재 줄을 삭제할 때 많이 활용된다.





    Ctrl + L : 커서가 위치한 줄 삭제, 선택된 줄단위로 삭제

    중요도 : ★★★★☆

    활용 : 위 단축키와 비슷하지만 영역을 선택했을 때 여러줄을 줄단위로 삭제 한다.





    Ctrl + K, C : 선택 영역 주석 달기

    중요도 : ★★★★☆

    활용 : 선택 영역의 주석을 한 단계씩 추가한다.





    Ctrl + K, U : 선택 영역 주석 없애기

    중요도 : ★★★★☆

    활용 : 선택 영역을 주석을 한 단계씩 감소시킨다.






    Alt + F8 : 선택 영역 코드 탭 정리하기

    중요도 : ★★★★☆

    활용 : 선택한 영역의 코드들의 탭이 뒤죽박죽일 때 사용하면 편리하다.










    디버깅 관련 단축키


    F7 : 빌드

    중요도 : ★★★☆☆

    활용 : 이번 빌드 상태와 비교하여 수정된 소스에 대해 다시 빌드한다.





    Ctrl + Alt + F7 : 전체 다시 빌드

    중요도 : ★★★☆☆

    활용 : 현재 솔루션 전체를 다시 빌드한다. 링크가 꼬엿을 때 외엔 잘 사용하지 않는다.





    F5 : 빌드 + 실행

    중요도 : ★★★★★

    활용 : F7을 누른후 실행한 결과와 같다.





    Ctrl + F5 : 빌드 없이 실행

    중요도 : ★☆☆☆☆

    활용 : 최근에 빌드된 상태의 실행 파일을 실행시킨다.

             소스 수정없이 다시 실행 시키고 싶을 때 빌드 시간 없이 실행 하므로 빠르다





    F9 : 브레이크 포인트 설정

    중요도 : ★★★★★

    활용 : 현재 커서가 위치한 줄에 중단점을 설정한다.

             중단점이 걸리면 디버그시 해당 코드를 실행하기전에 중지되어 사용자에게 코드 위치를 보여준다.





    F10 : 줄단위 실행

    중요도 : ★★★★★

    활용 : 디버깅 모드에서 현재 디버깅하고있는 소스의 줄단위로 진행 시킨다.





    F11 : 코드 단위 실행

    중요도 : ★★★★★

    활용 : 디버깅 모드에서 현재 진행중인 커서위치의 코드를 실행한다.

             커서위치의 코드내에 함수가 있다면 그 함수의 내부로 들어가게 된다.





    F12 : 정의로 이동

    중요도 : ★★★★★

    활용 : 변수, 함수, 클래스 등의 선언부로 이동한다.

             눈에 보이는 변수, 함수 등의 정체를 확인하는데 많이 사용된다.





    Ctrl + '-'키 : 이전 커서 위치로

    중요도 : ★★★★★

    활용 : 이전 커서위치로 이동하게 된다.

             보통 F12로 변수를 탐색한후, 다시 돌아오는데 많이 사용한다.





    Ctrl + Shift + '-'키 : 다음 커서 위치로

    중요도 : ★☆☆☆☆

    활용 : 위의 단축키와 반대 되는 개념이다.





    Ctrl + F2 : 커서가 위치한 줄에 책갈피 설정

    중요도 : ★★★☆☆

    활용 : 현재 문서에서 커서가 위치한 줄에 책갈피를 설정한다.

             책갈피는 관심있는 코드를 메모해놓고 쉽게 접근하기 위해 사용한다.





    F2 : 다음 설정된 책갈피로 커서 이동

    중요도 : ★★★☆☆

    활용 : 현재 문서에서 설정된 책갈피가 있을 때 순차적으로 책갈피를 탐색한다.





    Ctrl + Shift + F2 : 설정된 책갈피 모두 삭제

    중요도 : ★★★☆☆

    활용 : 현재 문서에 설정되어 있는 책갈피를 모두 삭제한다.





    Ctrl + F10 : 커서 위치까지 실행

    중요도 : ★★☆☆☆

    활용 : 현재 커서가 위치한 곳까지 실행하게 된다.

             편집상태라면 빌드 + 커서 위치까지 실행된다.

             한손으로 누르기 힘든 단축키라 우클릭 메뉴를 이용해도 좋다.








    기타


    마우스 우클릭 - Find All Refrence : 모든참조 찾기

    중요도 : ★★★★☆

    활용 : 현재 커서가 위치한곳의 변수나 함수등이 사용된 곳을 프로잭트에서 모두 찾아 표시한다.

             LifeCycle 을 알아보는데도 좋다.





    Alt + P + P : 프로젝트 속성

     

    중요도 : ★☆☆☆☆


    활용 : 프로젝트의 속성을 본다. 프로젝트 속성을 보는일은 많이 없으므로 큰 활용도는 없다.



    'scrap' 카테고리의 다른 글

    LinkError 추적하기  (0) 2010.03.18
    SVN 사이트  (0) 2010.03.18
    증분링크  (0) 2010.03.18
    윈도우 가상 드라이버 생성  (0) 2010.03.18
    Gentoo Linux 설치  (0) 2010.03.18

    증분링크(incremental link)는 바이너리를 가능한 빠르게 링크하고자 함수 호출시 직접적인 주소를 참조하지 않고 별도의 테이블(ILT, 증분링크테이블)로 관리를 하여 함수가 수정되어 크기가 변하여도 모든 CALL 명령을 찾아 수정을 가하는게 아니고 테이블만 변경할수 있도록 하여 링크 속도를 높인다.

    ILT 테이블 예
    @ILT+0(_wmain):
    00401005 jmp wmain(401070h)
    @ILT+5 (??_GCResString@@UAEPAXI@Z)
    0040100A jmp CResString::'scalar deleting destructor' (401B40h)

    증분링크시 추가적인 패딩데이타가 실행파일에 추가되어 용량이 커진다.

    /INCREMENTAL:yes 또는 no로 설정할수 있고 이와 관련된 정보는 .ilk에 저장되어 사용된다.

    디버그 모드에서 실행중 수정하면서 진행하려면 증분링크로 빌드되어야 한다. (VS에서는 /DEBUG 시 자동적으로 /INCREMENTAL 이 지정된다.)

    그외에 /OPT:REF /OPT:ICF 를 선택하면 증분링크는 무시되고 비증분링크를 수행한다.

    API Hooking시 증분링크에 대한 체크가 필요하다.

    // 증분 링크 체크
    // Microsoft Visual C++은 실행중에도 코드를 수정할 수 있게끔
    // 증분 링크를 사용하여 함수의 주소가 실제 함수를 가리키지 않고, 실제 함수로 jmp 하는 명령의 주소로 되어 있다.
    // 참고: System DLL일 경우에 무시
    if ((DWORD)fnApi < 0x80000000 && *(PBYTE)fnApi == 0xE9)
    {
      fnApi = (PROC)((int)(fnApi) + (*(int *)((PBYTE)fnApi+1)) + 5);
    }


    'scrap' 카테고리의 다른 글

    SVN 사이트  (0) 2010.03.18
    Visual Studio 단축키  (0) 2010.03.18
    윈도우 가상 드라이버 생성  (0) 2010.03.18
    Gentoo Linux 설치  (0) 2010.03.18
    WSS / MOSS Sp2 설치  (1) 2010.03.18

    + Recent posts