Visual Studio 2013 Express 는 Visual Assist 같은 플러그인을 설치 할 수 없기 때문에 처음 설치 한 후 c++ 코드를 열어보면


꽤나 밋밋한 화면을 볼 수 있다.


Code 의 Syntax highlighting 기능을 사용하면 가독성이 좋아 지기에 여러 방법을 찾아 보니


Fonts Color 설정에서 변경이 가능!



Visual Assist 에서 사용하는 색깔을 기준으로 맞춰보았다.



아래는 Visual Studio 2013 Express 에서 C++ 문법에 관한 코드 색깔을 세팅한 설정 파일



Tools -> Import and Export Settings 항목을 이용해 아래 파일을 Import 하면 된다.



vs2013_visual_assist_color.vssettings






변경한 부분


MACRO, 지역 변수, 함수, 전역 함수, Class, 멤버 함수 등이다.



Font 는 "나눔고딕코딩" 으로 설정되어 있으며 해당 폰트가 없는 사람은 폰트를 먼저 설치 후 이용 요망.

Visual Studio 2010 을 회사에서 사용중에 있다.


자주 사용 하는 확장 도구를 정리 하고자 블로그에 포스팅


1. Productivity Power Tools

- 이건 Visual Studio 사용자라면 무조건 설치해서 쓰라고 하고 싶다.

  특히 스크롤바를 Map 모드로 쓸수 있다는 점이 가장 좋다.

  자세한 기능은 아래 링크 참조

http://visualstudiogallery.msdn.microsoft.com/d0d33361-18e2-46c0-8ff2-4adea1e34fef/


2. Visual Assist X

- 개발자라면 다 아는 Visual Assist 이다. 특히 C/C++, MFC 개발자라면 필수

  단, 유료 확장 도구이다.

http://www.wholetomato.com/downloads/default.asp


3. Indent Guides

- 이 툴은 괄호로 묶었을때 괄호 안에 코드량이 많아 질 경우 어떤 괄호와 일치 되는지 보여주는 UI 도구이다.


아래 링크에서는 Visual Studio 2013, 2012 만 지원한다.


http://visualstudiogallery.msdn.microsoft.com/e792686d-542b-474a-8c55-630980e72c30


VS2010 에서 사용하고 싶다면 아래 링크를 이용한다.

http://indentguide.codeplex.com/releases/view/110312




4. CommandingImage

- 이 도구는 도구 -> 외부 도구를 추가 했을때 생기는 메뉴에 대해 아이콘을 만들어 주는 유틸이다.


내가 추가한 CppCheck, Tortois 관련 메뉴들


원래는 앞쪽에 아이콘들이 없다. CommandingImage 도구를 이용해서 아이콘들을 삽입한 것이다.

왜 굳이 아이콘을 넣어야 하는가? 라고 묻는다면 다음과 같이 활용하기 위해서이다.



툴바에 외부 도구를 넣었을때 아이콘이 없으면 위와 같이 아이콘이 보이는게 아닌 해당 메뉴의 글자가 통째로 들어간다



위와 같이 외부 명령 24 또는 사용자가 지정한 이름 그대로 툴바 창에 들어가기 때문에 지저분해진다.


http://visualstudiogallery.msdn.microsoft.com/ff5060af-3df8-4063-b61b-19da41c66f20?SRC=VSIDE


2014년 2월 13일 이후로 Visual Studio 의 매크로 기능이 작동을 하지 않는 현상이 보였다.

 

 

구글링 해본 결과 최근에 있었던 윈도우 업데이트 중 한놈이 문제를 일으키는듯 하다.

 

시작 -> 제어판 -> 프로그램 및 기능 으로 가서 설치 된 업데이트 보기를 선택하자.

 

수많은 설치된 업데이트 목록이 보이는데 그중 자신의 OS 및 .NET Framework 버전에 맞는 업데이트를 제거 하자

 

 

 

 

.NET 4.5.1 

.NET 4.5 

.NET 4 

 Windows 8.1

KB2898871

 

 

 Windows 8

KB2898870

KB2898865 

 

 Windows 7

KB2898869

KB2898864

KB2898855 

 Windows XP

 

 

KB2898855

 

 

 

 

좀 더 자세항 사항은 다음 링크를 참고 한다.

http://visualstudioextensions.vlasovstudio.com/2014/02/13/visual-studio-2010-macros-stop-working-after-february-2014-windows-update/

 

 

 

업무 중 솔루션을 커맨드로 빌드 해야 할 일이 생겼다.

 

문제는 해당 솔루션을 순서에 맞게 각각 프로젝트 단위로 빌드를 해야 하는데..

 

각각 프로젝트를 devenv "SolutionPath" /rebuild "Debug_x64|x64" /project "ProjectName"

 

위와 같은 형식으로 리빌드를 요청 하면 종속성이 묶여 있는 프로젝트까지 모두 다시 빌드를 하는 문제가 있었다.

 

몇시간 구글링을 해본 결과 MSBuild 를 이용해서 해결 할 수 있었다.

 

사용한 MSBuild 는 4.0이다.

 

MSBuild "SolutionPath" /p:Platform=x64;Configuration=Debug_x64 /p:ProjectReferences=false /t:"ProjectName:Rebuild"

 

위와 같이 /p 옵션 중에 ProjectReferences 옵션을 false 로 해주면 프로젝트 종속성은 무시 하고 해당 프로젝트만 빌드 한다.

 

MSBuild 의 /p 옵션은 해당 프로젝트 파일 xxxx.vcxproj 파일을 메모장등으로 열어보면 XML 형태로 작성 되어 있는것을 볼수 있는데

 

이중 Element 의 이름을 의미 하는것같다.

 

 

MSBuild 의 자세한 사항은 MSDN 을 참고하면 된다.

 

http://msdn.microsoft.com/ko-kr/library/ms171486.aspx

 

 

 

Visual Studio 에서 빌드 전 이벤트, 빌드 후 이벤트 들을 설정해서 사용할수 있다.

이때 Visual Studio 자체의 Macro 를 이용해서 각 경로와 파일 이름들을 알 수 있는데

 

경로로만 이루어진 매크로는 맨 마지막에 \(백슬래시) 가 붙는다.

 

symstore 를 이용하려고 "$(SolutionDir)" ... argument 등등..

 

을 입력을 하였는데 argument 를 잘못 파싱을 하는 문제가 있다.

 

큰 따옴표로 묶은 매크로에서 맨 마지막 역슬래시가 " 큰따옴표와 결합하면서 문제가 발생하는듯..

c 언어에서는 \"  이렇게 되면 문자 큰따옴표를 의미하기 때문에 argv 로 전달이 잘못된다.

 

해결방법은 의외로 간단하다.

 

다음과 같이 \(백슬래시)를 하나 더 붙여주면 된다.

 

symstore "$(SolutionDir)\"

 

이것때문에 argv 를 받는 콘솔 프로그램 만들때 괜히 이상하게 파싱하는 모듈만 만들고....제길 ㅋㅋ

Sub UnderscoreT()
        'DESCRIPTION: This macro will automatically put "_T( )" around 
        '             your strings, Author: Orin Walker, 1999, Version 1.1
        '             Last change - Acidpop(http://acidpop.tistory.com) (2012.09.07)
        '             Supported Visual Studio 2010 Macro
        Dim iCount As Integer
        Dim bFoundAQuote As Boolean
        Dim strTemp As String
        Dim strStuffAtEnd As String
        Dim bDone As Boolean
        Dim str As String
        Dim strBuildString As String
        Dim Selection As TextSelection

        Dim win
        win = ActiveWindow
        'If win.type <> "Text" Then
        '    MsgBox("This macro can only be run when a text editor" + _
        '      " window is active.")
        'Else
        iCount = 0
        bFoundAQuote = False
        ActiveDocument.Selection.SelectLine()
        strTemp = ActiveDocument.Selection.Text

        Selection = ActiveDocument.Selection

        strStuffAtEnd = ""
        While bDone <> True
            str = ParseString(strTemp, bFoundAQuote, strStuffAtEnd)
            strBuildString = strBuildString + str

            If bFoundAQuote = True Then
                strTemp = strStuffAtEnd
            Else
                bDone = True
                'ActiveDocument.Selection.Delete()
                'ActiveDocument.Selection = strBuildString
                Selection.Text = strBuildString
            End If
            iCount = iCount + 1
            If iCount > 100 Then    ' safety valve
                bDone = True
            End If
        End While
        'End If
    End Sub
    Function ParseString(ByVal strTemp, ByRef bFoundAQuote, _
                         ByRef strStuffAtEnd)
        Dim strSpace As String
        Dim iLen As Integer
        Dim iPos As Integer
        Dim x As Integer
        Dim strCheck As String
        Dim iUnderscoreTPos As Integer
        Dim strBeforeFirstQuote As String
        Dim strNewTempStr As String
        Dim strRemaining As String
        Dim strStuffInQuotes As String


        'DESCRIPTION: This is a helper function for the UnderscoreT macro,
        '             Author: Orin Walker, 1999, Version 1.1
        ' Comment in/out whatever style you prefer       
        strSpace = ""   ' NO space before or after "_T("
        'strSpace = " " ' Add a space before and after "_T("
        iLen = Len(strTemp)
        bFoundAQuote = False
        ' Get the position of the first quote on the line
        iPos = InStr(strTemp, Chr(34))
        If iPos > 0 Then    'a quote was found
            ' Go back and see if we have an existing 
            ' _T( defined for this quote
            x = iPos - 5          ' Go back up to 5 characters
            If x <= 0 Then      ' If we have reached the 
                ' beginning of our string
                x = 1           ' Set x to start at the first character
            End If
            strCheck = Mid(strTemp, x, iPos)

            iUnderscoreTPos = InStr(strCheck, "_T(")

            ' If we found one grab everything before the first quote
            strBeforeFirstQuote = Mid(strTemp, 1, iPos - 1)
            If iUnderscoreTPos > 0 Then     ' we found an "_T("
                ' Do NOT add the "_T(" to our temporary string
                strNewTempStr = strBeforeFirstQuote
            Else
                ' Now create our new temporary string and append "_T("
                strNewTempStr = strBeforeFirstQuote + "_T(" + strSpace
            End If
            ' Get the remaining string
            strRemaining = Mid(strTemp, iPos + 1, iLen)

            iLen = Len(strRemaining)
            ' Now find the second quote
            iPos = InStr(strRemaining, Chr(34))

            If iPos > 0 Then
                ' If we found one save the stuff in quotes
                strStuffInQuotes = Chr(34) + Mid(strRemaining, 1, iPos)

                ' And grab the stuff after the quotes
                strStuffAtEnd = Mid(strRemaining, iPos + 1, iLen)

                If iUnderscoreTPos > 0 Then     ' we found an _T(
                    ' Do NOT add the final ")" to our parsed string, 
                    ' because it alreasy exists
                    ParseString = strNewTempStr + strStuffInQuotes
                Else
                    ' Create our parsed string
                    ParseString = strNewTempStr + strStuffInQuotes + _
                        strSpace + ")"
                End If
                bFoundAQuote = True
            Else
                ' No SECOND quote was found so just return 
                ' what was passed in
                ParseString = strTemp
            End If
        Else
            ' No quote was found so just return what was passed in
            ParseString = strTemp
        End If
    End Function

 

 

http://acidpop.tistory.com/52 위 글에 올려놨던 _T 자동 입력 매크로이나

 

Visual c++ 6.0 에서만 작동하던 녀석을

Visual 2010 에서도 작동 하도록 변경해봤다.

 

사용 방법은 다음과 같다.

 

1. 위 소스를 복사

 

2. Visual Studio 에서 도구 -> 매크로 -> 매크로 편집

 

3. visual Studio Macros 창이 뜨면 프로젝트 -> 모듈 추가

 

 

 

 

 

 

 

 

4. 모듈을 선택 하고 이름은 AutoT 로 하자

 

5. 추가 하면 아래와 같은 코드가 만들어 지는것을 볼 수 있다.

 

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Public Module AutoT
    ' 여기에 위에서 복사한 소스를 붙여넣기 하자

End Module

 

6. 표시한 곳에 소스를 붙여넣기 한다.

 

7. 단축키로 등록하여 준다.

 

도구 -> 사용자 지정 -> 키보드 버튼을 클릭하면 다음과 같은 창이 뜬다.

 

 

 

단축키를 설정하려는 매크로 UnderscoreT 매크로를 선택 한 다음

 

바로 가기 키 누르기(P) 텍스트 박스에서 원하는 단축키를 누른다.

 

필자는 Ctrl + Q 로 할당 하였다.

 

텍스트 에디터에서만 사용을 할 것이므로 새 바로 가기 사용 위치는 전역 -> 텍스트 편집기 로 바꿔준다.

 

이제 "문자열" 형태로 된 코드에서 단축키를 눌러보자.

 

_T("문자열")  형태로 변경 되는것을 볼 수 있다.

 


1. dsw 파일 Visual C++ 여러 창으로 열기

dsw 파일은 XP 에서 DDE를 해제 하여 각각 창이 열리 도록 설정이 가능했지만 Windows 7 에서는 확장자 별 옵션 설정이 사라졌다.

고로 레지스트리를 직접 수정, 또는 변경하여야 한다.


아래는 다른 블로그에서 퍼온 내용

Information

dsw 파일 아이콘 모양 변경

  • 레지스트리 위치
    HKEY_LOCAL_MACHINE\SOFTWARE\Classes\dswfile\DefaultIcon
  • 변경값
    "C:\\PROGRA~2\\MICROS~1.0\\Common\\MSDev98\\Bin\\msdev.exe,0"
    끝에 숫자 값을 0으로 변경한다. 이 값은 "C:\Program Files (x86)\Microsoft Visual Studio 6.0\Common\MSDev98\Bin\msdev.exe 파일의 아이콘 리소스 번호이다.

 

Visual studio 6.0 다중실행 허용

  • 레지스트리 위치
    HKEY_LOCAL_MACHINE\SOFTWARE\Classes\dswfile\shell\&Open with MSDev\ddeexec
  • 변경값
    Open(\"%1\") 값을 삭제

출처 : http://blog.naver.com/tachikomatic/100126753533





2. Platform SDK 2003 설치 방법

Windows 7 64bit 에서는 Visual c++ 6.0 을 지원하는 최종 Platform SDK 가 설치가 되지 않는다.

setup 을 실행하면 setup64 어쩌고? 나왔던거 같고 setup64를 실행하면 그거도 정상작동을 하지 않는다.

그렇다면?

이미 설치 되어 있는 시스템에서 아래 폴더를 통째로 복사해서 사용한다.

c:\Program File\Microsoft SDK\   폴더를 통째로 복사해서

다음 경로에 c:\Program Files (x86)\  폴더로 그대로 복사한다.

그러고 나서 Visual C++ 6.0 의 Tools -> Option 으로 가서 Directory 항목에 탭으로 가서

include 에는 아래경로를 등록해서 최상위로 올려준다.

c:\Program Files (x86)\Microsoft SDK\include\




Library filed 에서는 아래 경로를 등록하여 최상위로 올려준다.

C:\Program Files (x86)\Microsoft SDK\Lib\



플랫폼 SDK 설치가 안된다고 하면 그냥 헤더와 라이브러리파일만 있으면 되기 때문에 위 방식으로 충분히 사용 가능하다.






3. VC++ 6.0 디버깅 가능하게 만들기

Windows 7 64bit 에서 디버깅을 하다가 디버깅을 종료 하면 해당 프로세스가 그대로 남아 있는 현상이 있다.

프로세스 끝내기를 눌러도 절대 죽지 않는다... 초강력 좀비 -_-

Visual c++ 자체를 종료 하면 그제서야 해당 프로세스가 종료가 된다.

디버깅 모듈에서 버그가 있는것으로 알려져 있으며

다음과 같은 방법으로 해결이 가능하다.

32bit 는 레지스트리 추가 만으로 가능한것으로 알려져 있으나 테스트는 해보지 못함

 - Windows 7 32bit

     [ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN ]
     위 경로에 DWORD 형태로 이름은 "TabProcGrowth" 으로 하고 값은 0으로 설정

vc_debug_x86.reg


- Windows 7 64bit
     [ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN ]
     위 경로에 DWORD 형태로 이름은 "TabProcGrowth" 으로 하고 값은 0으로 설정

     [ HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN ]
     위 경로에 DWORD 형태로 이름은 "TabProcGrowth" 으로 하고 값은 0으로 설정

vc_debug_x64.reg


64bit 는 양쪽 다 등록하여 준다.

reg 파일은 급하게 만든거라 작동이 되는지 모르겠다.


위와 같이 레지스트리를 등록하면 된다.

단, Windows 7 64bit 는 파일 패치까지 필요하다.

방법은 2가지가 있다.

 - 방법 1
TLLOC.dll 파일 패치

TLLOC.dll 을 다운로드 받아
C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin
위 경로에 덮어 씌우면 된다.
덮어 씌우기 전에 기존에 있던 TLLOC.dll은 만일의 상황에 대비하여 백업해둔다.

TLLOC.dll



  - 방법 2
ShiftF5Fix.dll 파일 패치
C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\AddIns
경로에 복사 한 다음
Visual c 에서 Tools -> Customize 선택
Add-ins and Macro files 탭으로 이동하여
ShiftF5Fix 를 체크 한 다음 Visual c++ 재시작

ShiftF5Fix.dll



필자는 방법 1을 이용하여 TLLOC.dll 만 패치 하였고 방법 2는 ShitfF5Fix.dll 이 DllRegisterServer 가 작동하지 않아 등록이 되지 않음

위와 같이 파일 패치 까지 한 다음 시스템 재부팅을 하여 모든 설정이 완료 됨.





  1. 5기반장님 2012.02.15 09:37

    이거 아닌데 아직 정리를 들했나본데.. 이상한거만 있어. 그리고 왜 글마다 사람들과 대화하는 어체를 구사함?
    댓글 나만 남기는데?ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ나랑 대화하고 싶으면 쪽지나 대화창 띄우센

  2. BlogIcon Acidpop acidpop 2012.02.15 16:51 신고

    내가 저렇게 세팅해서 잘 쓰고 있는데 왜그럼 ㅋㅋㅋ

  3. jsnic 2012.05.04 03:54

    안녕하세요
    윈7 32bit 에 vc 6.0 을 쓰고있는데요
    릴리즈와 디버그 빌드한 파일은 다 잘 실행되는데 F5 눌러서 디버깅을 시작하려 하면 0xc00005 에러가 나네요. Breakpoint도 할 수 없는게 main 들어가기 전에 에러가 나서요. XP에서 잘 쓰던 모든 프로젝트가 다 그런 증상인데 어찌해야 할까요.. out 창에 모두 똑같이 다음과 같이 나오네요.

    Loaded 'ntdll.dll', no matching symbolic information found.
    Loaded 'C:\Windows\System32\kernel32.dll', no matching symbolic information found.
    Loaded 'C:\Windows\System32\KernelBase.dll', no matching symbolic information found.
    First-chance exception in Win7Test.exe: 0xC0000005: Access Violation.
    The thread 0xD94 has exited with code -1073741819 (0xC0000005).
    The program 'E:\PROJECT\Win7Test\Debug\Win7Test.exe' has exited with code -1073741819 (0xC0000005).

    • BlogIcon Acidpop acidpop 2012.05.04 11:48 신고

      새 프로젝트를 만들어서 시도해보세요
      그렇게 해서도 문제라면 Visual Studio 내부 라이브러리들이 깨진게 아닐지...

  4. 감사합니다. 2012.10.08 15:12

    좋은정보 감사합니다. 퍼갈께요ㅎ

  5. 누리로 2013.04.06 22:30

    Platform SDK Feb 2003 - Windows 7 x64에서도 설치 잘 됩니다.
    단, setup.exe나 setup64.exe를 실행하면 안 되고, setup 폴더 안에 들어가서 msi 파일을 각각 실행하여 설치해야 합니다.

  6. 누리로 2013.04.06 22:39

    참고로 Febuary 2003 SDK (build 5.2.3790.0) 다운로드 링크는 다음과 같습니다.

    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.1.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.2.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.3.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.4.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.5.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.6.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.7.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.8.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.9.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.10.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.11.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.12.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.13.cab
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.bat
    http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/Extract.exe

    모두 다운받은 다음에 psdk-full.bat 파일을 이용해서 압축을 풀면 설치파일이 추출됩니다.
    거듭 말씀드리지만 setup.exe나 setup64.exe를 실행하지 마시고, setup 폴더 안에 들어가서 msi 파일을 더블클릭하여 설치하세요.

  7. zer0yes 2013.06.14 13:27

    정말 잘보고 갑니다 필요한 내용이 전부있네요 ^^

  8. themaxkor 2016.08.19 20:29

    굿 잡(입니다.)

  9. 상어 2017.05.17 19:37

    이거 vc6 sp5 서비스팩에서도 적용가능한 패치인가요?


WriteLog(불라불라불라불라\r\n

위와 같이 WriteLog 라는 단어로 시작하고 중간에는 어떤 문자열인지 상관없고 \r\n 이 있는 라인을 모두 찾아오는 정규식

{(WriteLog).*([a-zA-Z_]+)}{(\\r\\n)}

위는 WriteLog 로 시작하고 a~z 사이의 문자만 포함하고 있을때.. % 나 () 등의 기호가 들어가면 찾지 않음

{(WriteLog).*}{(\\r\\n)}

WriteLog 로 시작해서 \r\n 으로 끝나는 문자열

위 문자열에서 \r\n 만 삭제 하려 한다면

바꿀 문자열에

\1

이라고만 써주면 된다.


내용 보강을 더 해야겠다...

정규식 잘만 공부 해놓으면 정말 편할듯..



예제 1


{(\[).*}{(\])}

 -> char  szName[NAME_LEN+1];
     char  szPhone[20];

위와 같이 배열로 선언한 뒷부분 [ ] 꺽쇠 표시를 다음과 같이 바꿔준다.

 -> char  szName;
     char  szPhone;

즉, [ 기호로 시작해서 ] 기호로 끝나는 모든 문자열을 제거하는 정규식이다.



-- 2011.11.29 Update
정규식에 쓰이는 ( ) { }  이런 기호를 찾으려면

\(   \)   \{   \}

이런식으로 앞에 \  기호만 붙여 주면 된다.


예제는 계속 업데이트 하겠음

+ Recent posts