WindowsSDK Visual Studio, Visual Studio Servicepack의 일부 include되는 파일셋은 서로 설치하면서 덮어 써집니다.

 

따라서, 가장 최신에 나온 파일이 가장 나중에 덮어 써지게 설치를 해야 합니다. Visual Studio2008을 예로 들면, 설치 순서는

 

Visual Studio2008 -> Visual Studio SDK 6.1 -> Visual Studio Service pack1 -> Security Update

 

순으로 이루어 져야 합니다.

 

 

특히 예전 Embedded C++로 개발할 때 온갖 툴과 SDK셋들을 설치 했을 때는 Embedded C++툴을 Visual Studio와 함께 설치 오더를 맞추어 줘야 했습니다. 설치 오더가 틀리면, 컴파일이 안되던가, 링크가 안되던가 등등 개발자를 당황스럽게 하는 문제를 발생시킵니다.

 

 

이번에 Visual Studio 2008 Servicepack1용 보안 업데이트인 MS09-035(http://support.microsoft.com/kb/971092)를 설치했을 때 설치 오더가 맞지 않을 경우 컴파일이 안 되는 문제가 있었습니다.

 

 

만일, Visual Studio Servicepack1를 설치한 후 SDK를 설치했을 때, Servicepack1의 최신 CRT파일을 SDK6.1의 구 CRT파일로 교체 된 다음 VisualStudio2008 Servicepack1 ATL보안 업데이트를 하고 나면, vector를 사용한 소스 컴파일 시 아래와 같은 에러가 뜨게 됩니다.

 

error C2039: '_Swap_adl' : is not a member of 'std'    c:\program files\microsoft visual studio 9.0\vc\include\xutility    2764

error C3861: '_Swap_adl': identifier not found    c:\program files\microsoft visual studio 9.0\vc\include\xutility    2764

 

 

문제의 원인은 Visual Studio 2008 설치 후 Servicepack1을 설치해서 최신 CRT셋으로 교체 했지만, 그 후 SDK6.1에 있는 오리지날 Visual Studio2008 파일 셋으로 일부 CRT관련 파일이 롤백 되었고 Servicepack1용 보안 업데이트에서 교체한 CRT파일이 Servicepack1 CRT셋에서 추가된 파일을 사용하기 때문입니다.

 

 

문제 해결 방법은,

 

 

에러 메시지가 나타내주듯, C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xutility 2764라인에서 사용된 _Swap_adl의 정의를 아래와 같이 _Swap_adl사용 시점 윗부분에 추가해 주던가,

 

// TEMPLATE FUNCTION _Swap_adl

template<class _Ty> inline

void _Swap_adl(_Ty& _Left, _Ty& _Right)

{    // exchange values stored at _Left and _Right, using ADL

swap(_Left, _Right);

}

 

 

에러가 난 시점에서 Servicepack1과 보안업데이트를 순서대로 다시 설치해 주시면 됩니다.

 

 

SDK Servicepack을 설치할 때 설치 오더가 있다는 점을 분명히 알아 두시고, 설치시 Requirement부분을 참고 하시면 도움이 됩니다.

 

마찬가지 이유로, Servicepack, 보안 업데이트로 인해 최신 파일셋이 설치된 다음, SDK 인스톨파일로 SDK 복구를 하게 되면 다시 SDK파일 셋으로 롤백되니 파일셋을 복구 하실 때는 설치 오더를 고려해서 복구를 하셔야 합니다.

출처 : devpia.co.kr(데브피아 VC++ 마을)

Posted by 배고파씨

Visual C++ 팀이 Visual C++를 사용하는 개발자 분들이 Internet Explorer 8 설치 후에 겪는 문제에 대해 블로그를 통해 우회 방법을 소개했습니다. 방법은 아래와 같습니다.

- regedit 실행

- “HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet
Settings\Zones”에서 “1000” 키 생성

- DWORD 엔트리 생성 (Name=1207, Type=REG_DWORD, Data=0x000000)

Visual C++ 사용하는 개발자가 Internet Explorer 8을 설치하고 나서, Visual Studio에서 마법사를 통해 함수 추가, 변수 추가, Smart Device 프로젝트 생성, Smart Device 클래스 추가 등과 같은 것을 실행할 때 예기치 않은 메시지와 함께 제대로 동작하지 않는 문제가 있습니다. Internet Explorer의 custom security manager 처리에서 순조롭지 않은 일이 발생했다고 하는데, 좀 더 자세한 것은 지켜봐야겠습니다.

Visual C++ Team Blog: http://blogs.msdn.com/vcblog/archive/2009/03/28/some-vs2005-and-vs2008-wizards-pop-up-script-error.aspx

IE8 설치 후 Visual Studio에서 변수 추가 실패.doc

Posted by 배고파씨

Exported-color-2009-05-08.vssettings


비주얼 스튜디오의 폰트와 배경색을 터미널의 화면 처럼 검정색 바탕으로 꾸며 봤습니다.
흰색 바탕도 괜찮지만 클리어 타입 폰트들의 가독성도 검정 바탕에서가 더 좋은거 같고
일단 뭔가 있어 보입니다 ㅋㅋㅋ

비주얼 어시스트를 사용 하신다면 추가 color 설정을 디폴트 버튼을 누르면 검정색용 디폴트 컬러로 마춰 질겁니다.
비주얼 어시스트가 디폴트 컬러를 2가지를 가지고 있더군요.
그리고 일부 설정을 조금만 손보시면 뭔가 있어 보이는 코딩 화면을 쓰실 수 있습니다. ㅎㅎㅎ

Posted by 배고파씨

이번에 나온 리본 UI를 지원하는 Feature Pack은 BCGSoft에서 이미 판매 중인 BCG Library를 가져다 쓴것이라고 합니다.
그런데  메뉴 폰트 크기가 1 pixel 작아서 좀 어색해 보이는데요. 이번에 추가된 afxGlobalData 라는 전역 객체가 있습니다.
이것을 이용해서 메뉴 폰트를 수정 할 수 있습니다.

아래 코드는 시스템의 파라메터에서 시스템의 폰트크기를 가져와서 메뉴 폰트 크기를 수정하는 코드를 추가한 내용 입니다.

(MainFrm.cpp)

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
  return -1;

// 이 부분 추가
 LOGFONT logfont = {0};
 ::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &logfont, 0);
 afxGlobalData.SetMenuFont(&logfont, TRUE);


참고로 아래는 데브피아에 올라와 있던 코드 입니다.
폰트의 정보를 시스템파라메터에서 가져오지 않고 직접 설정 하는 예제 입니다.

(MainFrm.h)
...
LOGFONT m_lf;
...

(MainFrm.cpp)

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
    return -1;
 
  //이부분을 추가 (사용할때는 함수를 만들어 처리할것)
 memset(&m_lf, 0, sizeof(LOGFONT));
 m_lf.lfCharSet = 0x81; // 한글 Character Set
 m_lf.lfHeight = 12; // 12 point 크기
 wcscpy_s(m_lf.lfFaceName, _T("굴림"));
 afxGlobalData.SetMenuFont(&m_lf, TRUE);
...

Posted by 배고파씨
다음과 같은 순서로 DirectX 9.0 SDK 파일을 다운로드 및 설치 한 다음 Microsoft Visual Studio 2008 (Visual C++ V9.0)의 환경을 설정하셔야 합니다.

1. DirectX 9.0 SDK를 다운로드 하고, 설치 합니다.
- DirectX 9.0 SDK 최신버전 다운로드

2 DirectX 9.0 SDK 설치가 끝나면, Microsoft Visual Studio 2008의 환경을 설정해야 함으로 Microsoft Visual Studio 2008을 실행한다. 'File - New - Project'에서 'Project types : Visual C++ - Win32'의 "Win32 Project"을 선택하고, 프로젝트 이름(Project Name)과 프로젝트가 저장될 위치(Location)를 입력하고 확인(OK) 버튼을 클릭하여 다음 단계로 넘어간다.(가능한 C 혹은 D 드라이브에 자신의 이름으로 폴더를 하나 만들고 그 폴더를 지정하도록 한다.)

3 Microsoft Visual Studio 2008의 메뉴 'Tools - Options - Projects and Solutions - VC++ Directories' 항목을 선택하고, 'Show directories for:'의 'Include files'를 위해서 아래 'Directoreis'에 앞에서 설치한 DirectX 9.0 SDK의 include 폴더의 위치(예, C:\Program Files\Microsoft DirectX SDK (August 2008)\Include)를 [New Line] 아이콘 메뉴를 사용하여 추가로 설정해준다.
   또한 'Show directories for:'의 'Library files'를 위해서 아래 'Directoreis'에 앞에서 설치한 DirectX 9.0 SDK의 lib 폴더의 위치(예, C:\Program Files\Microsoft DirectX SDK (August 2008)\Lib\x86)를 [New Line] 아이콘 메뉴를 사용하여 추가로 설정해준다. 그런 다음, 확인(OK) 버튼을 클릭하여 빠져 나간다.

4 마지막으로 프로그램들을 빌드(Build)하기 위해서 Microsoft Visual Studio 2008의 메뉴 'project - Property - Configuration Properties - Linker - Input' 탭을 선택하고, 'Additional Dependencies'에 "d3d9.lib, d3dx9.lib, winmm.lib"를 추가로 입력하고 확인(OK) 버튼을 클릭하여 빠져 나온다. (여기서 'winmm.lib'는 DirectX 9.0 SDK의 라이브러리가 아니라 윈도우즈 멀티미디어 라이브러리임)

자 이제 DirectX 9.0 SDK 설치 및 Microsoft Visual Studio 2008 환경 설정 과정이 끝났습니다. Microsoft Visual Studio 2008을 사용하여 게임 프로그래밍을 실습해 볼수 있습니다.
Posted by 배고파씨
Visual C++ 2008 Express Edition에서도 WTL을 사용하는 방법.

1. Visual C++ 2008 Express Edition을 설치하게 되면 기본적으로 'Microsoft Windows SDK for Visual Studio 2008 Headers and Libraries'가 설치가 됩니다. 하지만, 이 SDK에는 ATL 및 MFC와 관련된 헤더 파일이 없습니다. (WTL을 사용하려면 ATL 헤더가 필요)

2. 따라서 이전 버전인 Windows Server® 2003 R2 Platform SDK을 다운로드 받으셔서 설치하신 후, 이 SDK가 설치된 폴더(보통 C:\Program Files\Microsoft Platform SDK)에 가셔서 include 폴더 아래에 있는 atl 폴더에 있는 파일 모두를 WTL의 include 폴더로 복사하시면 됩니다.

* 이 과정이 귀찮으신 분들을 위해 따로 파일을 모아서 올려두었습니다.


ATL header files for WTL


3. 아래에 첨부한 'WTL Application Wizard for VC 9.0'를 WTL이 설치된 폴더의 AppWiz 폴더에 압축을 풀어서 setup90x.js을 실행합니다.


WTL Application Wizard for VC 9.0

 
4. VC++을 실행하여 Tools - Options 메뉴를 선택하여 Projects and Solutions - VC++ Directories 항목을 선택하여 Show directories for 항목의 include files를 선택하여 WTL이 있는 폴더를 등록합니다. 그리고 File - New - Project 메뉴를 선택하여 WTL 프로젝트를 선택하여 프로젝트를 생성합니다.

5. 만약 컴파일 중에 'ATL.LIB'가 없다는 메시지가 나오면 Project - Properties에 가셔서 Configuration Properties - General의 'Use of ATL'을 'Static Link to ATL'로 변경하시면 됩니다.
Posted by 배고파씨