Notice»

Recent Post»

Recent Comment»

Recent Trackback»

Archive»

« 2025/1 »
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

 
 

오라클에는 top이 없다.
이중쿼리로 order by 해논 결과를 ROWNUM 제어해서 보여줘야한다.

SELECT *
FROM (SELECT *
           FROM EMP
           ORDER BY HIREDATE)
WHERE ROWNUM < 11;



자세한 내용은 아래 참조

top-N reporting (오라클 TOP 기능 구현)
http://blog.naver.com/wutao?Redirect=Log&logNo=30034421385


:

mRemote,원격데스크탑 복사 기능 설정

Portable Life | 2009. 11. 17. 14:31 | Posted by 99%

'Portable Life' 카테고리의 다른 글

Firefox(파이어폭스)  (0) 2009.10.06
AutoIt 3.1.0 소스코드  (0) 2009.05.13
ThinApp(Thinstall) 정리  (0) 2009.04.04
How to Thinstall a .NET 2.0 Application  (2) 2009.03.20
TheWorld2.4 & 알툴바(그리고 ActiveX)  (0) 2009.03.20
:
Win7을 쓰고 있는데 어느날 갑자기 인터넷이 안된다.
무선은 잘잡히는데 유선이 안된다;
선을 꼽고 기다리면 식별중..이라고만 나온다.

네이년에 찾아보니 비스타부터 이런문제가 많다..
비스타의 "식별되지 않은 네트워크" 문제 해결하기
win 7 식별되지 않은 네트워크 문제 -어느날 인터넷이 느려졌다

여러가지 문제가 있는데 나는 그중 다행히도 드라이버 문제였다
Win7용 드라이버를 찾아 설치해주니 해결되었다. 하루를 날렸다 ㅡ.ㅡ;
http://www.intel.com/support/ethernetcomponents/controllers/82567/sb/CS-029669.htm

//////////////////////////////////////////////////////////////////////////////////////////////////
// 091102

IPTime에 문의 했다
1.공유기 설정에 TWIN IP를 설정했냐고 묻더라..
설정안되어있다.
2. 비스타나 Win7에서 네트웍 설정을
홈,회사등으로 설정할수 있는데
홈으로 설정하지 말란다. 홈으로 설정했을때 문제가 한번 있었다고 한다.

오늘또 식별중 문제가 있었다.
오늘은 그전과 달리 DHCP로 사용중인 IP를 고정으로 바꿨더니 문제가 없었다.

//////////////////////////////////////////////////////////////////////////////////////////////////
// 091130

추가로 잘정리된 문서가 있어 가져온다.
http://cafe.naver.com/window7/56966
:

WM 응용 개발도구 세미나

프로그래밍/Mobile | 2009. 10. 21. 10:44 | Posted by 99%
 
“스마트폰 모바일 랩” 포럼에서 T Store 공모전을 맞아 두 번째 세미나를 개최합니다.

모바일 어플리케이션 개발에 관심을 갖고 있는 개발자가 알아야 할 것들은 너무나 많습니다. 다양한 모바일 OS, 다양한 단말기 환경들.. 이런 개발 환경은 우리의 선택을 어렵게 만들고 있습니다.
스모랩에서 준비한 두 번째 세미나에서는 “동등계층 협업 시스템” DevForge 를 통해서 여러분의 동료와 킬러앱 생산을 위해 협업할 수 있는 방법을 소개해 드리고, 삼성의 스마트폰 킬러 단말기 옴니아의 개발키트를 사용해서 옴니아 단말에 최적화된 킬러앱을 제작할 수 있는 방법을 제시합니다.
그리고 한 번의 노력으로 다양한 단말기 위에서 동작하는 킬러앱을 제작할 수 있는 SKT 가 제안하는 새로운 개발 프레임워크 SKAF 를 만나보세요!!!

킬러앱(KillerApp)을 만들기 위한 발걸음을 “스마트폰 모바일 랩” 세미나와 함께 시작하세요.
 
주 제  Windows Mobile 응용 개발 도구
개최일시  2009년 10월 17일(토) 14:00 ~ 17:30
장소  SK텔레콤빌딩 4층 슈팩스홀
참가대상  - Windows Mobile 응용프로그램 개발을 시작하시는 분
 - 삼성 Omnia SDK에 관심이 있는 분
 - SKAF-SKT 프레임워크을 사용한 개발에 관심이 있는 분
내용수준  초급/중급
참가비  무료
 
시 간 Session 강 좌 제 목
13:00~14:00 60분 -  세미나 등록

14:00~14:10

10분 -  오프닝 인사
14:10~15:00 50분 Session 1  어플리케이션 개발을 위한 DevForge 사용 전략
 발표자: ㈜데브피아 송승규
15:00~15:10 10분 -  Break Time
15:10~15:50 40분 Session 2  삼성 Omnia SDK
 발표자: 형아소프트 대표 신석현

15:50~16:00

10분 -  Break Time
16:00~16:50 50분 Session 3  교육 프로그램 소개
 발표자: SK텔레콤 김성균 매니저
 SKAF-SKT
 발표자: 이노에이스 고영관 과장
16:00~17:10 20분 -  Q & A
* 각 섹션의 쉬는 시간은 유연성 있게 조절됩니다.
 

- 서울시 중구 을지로2가 SK텔레콤빌딩(SK T-Tower) 4층 슈팩스홀
- 교통편 : 지하철 2호선 을지로 입구역 4번 출구방면
 
- 세미나 당일 선착순 60명에게 경품이 지급됩니다. (사전 온라인 참가 신청자에 한합니다.)
Bluetooth GPS NCS-NAVI R120
선착순 40
SanDisk MicroSDHC(T-Flash) 4GB
선착순 20
 
- 세미나 당일 주차는 지원되지 않습니다. 가급적이면 대중교통을 이용해 주시기 바랍니다.
- 세미나 참가확인 페이지는 세미나 신청 후 [참가신청] 버튼을 다시 클릭하시면
  확인 하실 수 있습니다.

- 강의자료 : 스모랩 세미나 게시판을 참고하세요.
 




스모랩 - 세미나&번개&발표자료

[발표자료] DevForge 활용법_Windows Mobile 응용개발도구 세미나

[발표자료] T*OMNIA Application Development with 삼성 Mobile SDK by 신석현
[발표소스] T*OMNIA Application Development with 삼성 Mobile SDK by 신석현

[발표자료] SKAF(SKTelecom Application Framework) by 이노에이스



형아 소프트
http://www.hyongasoft.com/

삼성 모바일 SDK를 이용한 T*옴니아 개발하기 - 10/17 SKT타워 슈펙스홀

정말 인상깊게 들었다. 나도 1년후엔 저자리에서 강연하면서 같은 얘길 하고 싶다 ㅎㅎ



NCS-R120+
선착순 40명에 들라고 2시간전부터 대기!! ㅜ.ㅜ
2등을 하고! 블루투스 GPS를 받았다. 너무 좋다~~~ ㅋㅋ

:

Windows7 백신

프로그래밍/Windows(Vista,7) | 2009. 10. 20. 15:30 | Posted by 99%
현재(09.10.20) Windows7을 지원하는 백신이 없다.

카스퍼스키를 사용중이었는데 7에선 안예 설치가 안된다.

윈도우7 베타1 알약 ○, V3 Light △, PC그린 △
MS가 추천하는 윈도우7을 위한 백신 3가지

결국 찾다가 MS의 공짜 백신을 사용하게 됐다.
http://www.microsoft.com/security_essentials/default.aspx

일단 카스퍼스키 win7용이 나오기 전까지 사용예정이다.
:
Windows 7을 설치하고 Visual Studio 6을 설치해보니 서비스팩 5,6(sp5, 6)이 설치가 안된다.

몇가지 방법을 종합해서 정리해본다. 아래는 설치순서이다.(Win7, sp5)
Visual Studio 6 설치

1. visual studio폴더에서 setup.exe를 관리자권한으로 실행한다.

2. 설치시 사용자 정의로 해서 OLE/COM object viewer를 체크해제한다.

3. 설치가 완료되면 Java VM을 추가/제거에서 삭제한다.



Service Pack5 설치

setup.exe를 실행하면 MDAC가 없다는 이상한 소릴한다.(필자는 직접구해서 설치도 해봤으나 똑같다) 아래 설정값을 변경한다.

1) C:\ServicePack5Dir\sp598ent.stf를 메모장 등으로 연다.

2)
13 Group 28 36 38 29 30 32 26 27 14 25 16 17 20 18 19 15 39 21 22 24 23 43
위 내용을 (두번째 숫자인 36만 빼고)
13 Group 28 38 29 30 32 26 27 14 25 16 17 20 18 19 15 39 21 22 24 23 43
로 바꾼다.

3) 아래 내용을 삭제한다.
36 Depend "27 ? : 37"
37 IsWin95 CustomAction "sp598ent.dll,CheckForMDAC"

4) 저장하고 setup을 실행한다.

참고
Warning: Installing VS 6.0 on Vista Beta 2 leaves vulnerable Java VM
Visual Studio 6 on Vista
Visual Studio 6.0 SP5 setup on Vista Beta 2 (5384)?
Vista에서 Visual Studio 6 깔기

Visual Studio 사용하기 팁!!

1. 작업표시줄에 Visual C++을 고정해 놓는다.
위에서 오른쪽 버튼을 누르면


뜨는 창에서 고정을 선택하면 VC6버튼이 작업표시줄에 항상 존재한다.

그리고 실행할때 아이콘위에서 마우스 오른쪽 버튼을 누른후 Microsoft Visual C++ 6.0을 선택하면
창이 하나씩 생성된다. 이렇게 사용하면 기본적으로 한개의 창만 실행할 수 있는 VC6의 설정과는 상관없이 편하게 쓸수 있다.

2. VC6을 항상 관리자 모드로 실행하기

VC6이 비스타 이상에선 컴파일이 제대로 안될수 있다. 그럴경우 관리자모드로 실행하게 선택하면 되는데
설정자체를 바꿔서 항상 관리자모드로 실행하게 사용할 수 있는 방법이 있다. 이방법은 비스타이상에서의 일반 프로그램 사용 팁이다.

VC6의 속성창을 띄운다.


아래화면처럼 호환성 탭에서 관리자 권한으로 이 프로그램 실행을 선택한다.


위와 같이 하면 이 프로그램은 항상 관리자 모드로 실행된다.

:

VC6와 Kaspersky 충돌

버그리포트 | 2009. 10. 13. 21:02 | Posted by 99%

VC6에서 Release로 빌드시 자꾸
fatal error C1083: Cannot open compiler intermediate file: 'c:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\a09236ex': Permission denied
위와 같은 에러가 발생한다.

메세지에 따라 파일을 찾아가서 지워보니 다시 컴파일이 된다.

몇번을 이렇게 반복하고 나서 인터넷으로 찾아보니
결론은 카스퍼스키때문이었다.

몇일전 부터 사용하기 시작한 카스퍼스키.. 에베스트보단 훨 빠른거 같아 좋았는데..
이런 문제가 발생할 줄이야..

참고
eVC4.0과 Kaspersky AV 충돌

:

Firefox(파이어폭스)

Portable Life | 2009. 10. 6. 11:03 | Posted by 99%
http://www.mozilla.or.kr/ko/
http://usboffice.kr/zbxe/830 - 무설치(UO)

필수 플러그인 설치방법 ( 주의 3.5 버전 이상에서는 별도의 플러그인 설치없이 대부분의 동영상이 재생됩니다.)

[adobe Flash player]
  - Flash Player 다운받는다.
  - Univertial Extractor 1.5 로 다운받은 파일을 푼다.
  - NPSWF32.dll , flashplayer.xpt( 안넣어도 될지도....) 파일을 Dataplugins 폴더에 넣는다.

[윈도우 미디어 플래이어]
  - Windows media player 플러그인 다운받는다.
  - Univertial Extractor 1.5 로 다운받은 파일을 푼다.
  - ffplugin.msi 를 다시 Univertial Extractor 1.5 로 푼다.
  - np-mswmp.dll 을 Dataplugins 폴더에 넣는다.

[adobe Shockwave player]
  - ShockWave Player  다운받는다.
  - Univertial Extractor 1.5 로 다운받은 파일을 푼다.
  - LOC 폴더안에 있는 np32dsw.dll  파일을 Dataplugins 폴더에 넣는다.


추천 부가기능

 - IE Tab : 현재 페이지를 IE 렌더링으로 보여준다. ( 파폭에서 깨지는 웹페이지를 정상적으로 볼 수 있음 )
 - FireGestures : 마우스 동작으로 다양한 명령어 실행
 - DownLoad Statusbar : 파일 다운로드 시 화면 하단에 다운로드 진척상황 표시
 - DownThemAll! : 여러개의 이미지 또는 파일을 한꺼번에 다운로드 받을때 매우 편리함
 - DownloadHelper : 웹상의 이미지와 비디오 파일들을 다운로드 할 수 있도록 해줌
 - Personal Menu : 파이어폭스 기본 메뉴를 편집할 수 있게 해줍니다.
 
* 부가기능 설치 방법 : https://addons.mozilla.org/ko/firefox/  방문하여 원하는 부가 기능을 찾은 후, "FireFox 에 추가" 버튼을 누르면 자동 설치됩니다.

IE, Opera, Chrome로 보기 플러그인(IOC View)

참고 - http://usboffice.kr/zbxe/830



최신 파폭사용시 구버젼 확장기능 설치방법

Nightly Tester Tools를 파폭에 설치하면 최신 파폭을 지원하지 않는 구버젼의 확장기능도 설치할 수 있다. 물론 무시하고 설치하는거지만..
위의 링크에서 구버젼자체가 설치가 안되므로 확장기능 설치시는
http://update.mozilla.or.kr/addons/?app ... =extension'
위링크를 이용하자.

참고
확장기능 버전 업 하는 팁? - 확장기능 자체의 버젼을 확 올리는 방법도 있음


//DATA 폴더를 통째로 복사하면 설정을 가져올수 있고
//setting 파일을 열어서 경로지정을 확인해본다

// 부가기능 및 좋은 설명
http://www.choboweb.com/entry/%ED%8C%8C%EC%9D%B4%EC%96%B4%ED%8F%AD%EC%8A%A4-%ED%8C%81-%EB%A9%94%EA%B0%80-%EC%BD%9C%EB%A0%89%EC%85%98-Ver-01
http://donghaerang.com/category/Firefox/Firefox%20Add-on?page=2
http://kamingn.egloos.com/category/%EB%B6%88%EC%97%AC%EC%9A%B0%20%EC%93%B0%EB%8B%A4%EB%93%AC%EA%B8%B0
http://tong.nate.com/thesunrises/46736112
http://jugug.net/entry/Using-Firefox-Addons-2

//포터블 파이어폭스를 설치하여 사용할 때 좀 더 빠르게 실행되도록 하는 팁
http://portableapps.com/support/firefox_portable#performance


// 캐쉬 설정

browser.cache.disk.enable;true
browser.cache.disk.parent_directory;D:\Portable\network\browser\Firefox Portable\Data

:

boost

프로그래밍/C, C++ | 2009. 9. 25. 11:26 | Posted by 99%

http://www.boost.org
http://www.boost.org/users/news/



설치

다운로드
http://sourceforge.net/projects/boost/files/

boost는 date_time의 IO기능과 regex, thread, python, signals, test, filesystem등의 빌드가 필요한 라이브러리를 사용하지 않는다면 헤더파일을 include하는 것만으로 사용 가능하다. 환경설정에서 c:\boost_1_34_1와 같이 boost 상위 디렉토리를 등록해준다.
그외에 빌드를 해야하는 라이브러리 사용시는 아래를 참고하자.

1. boostpro

Visual Studio.Net(VC 7.1이상) 사용자는 boostpro라는 자동설치프로그램을 이용해서 boost를 자동설치 할수 있다.
http://www.boostpro.com/download

테스트시 9.0라이브러리 전체 선택하고 30분 정도 걸림

참고
http://neodreamer.tistory.com/158

2. Visual C++ 6(VC6)

vc6에서 빌드해서 사용하기 위해선 1_34_1버젼을 사용하기 바란다. 상위버젼은 vc를 설치하고 Platform SDK만 설치했는데도 제대로 빌드가 안된다.또한 VC6과 상위버젼을 같이 사용시 빌드 옵션을 -sTOOLS=msvc로 설정해도 상위버젼의 컴파일러로 빌드가 된다.(필자는 vc6과 2008을 같이 사용중인데 계속 vc9(2008)로만 컴파일이 된다.) 이렇게 두개의 vc버젼을 같이 사용할때는 vc6를 먼저 설치하고 빌드한후 다른 vc버젼을 설치해서 사용하는게 편하다.

참고로 1_34_1에는 circular_buffer가 없다. 또한 1_34_1버젼까지는 boostpro도 vc7.1까지만 지원한다.
boost사이트의 다운로드에 boost-binaries라고 컴파일된 결과물이 올라와 있지만 vc6용은 없다.
공식적인 문서는 확인 못했지만 vc6지원을 버린듯 하다;(STLPort를 설치하면 1_34_1 상위버젼도 빌드가 될지도 모르겠다.)

3. 빌드옵션

컴파일러
-sTOOLS=msvc
6.0: msvc
7.0: vc7
7.1(2003): vc-7_1
8.0(2005): vc-8_0
9.0(2008): vc-9_0


STLPort
1) -sTOOLS 옵션에 -stlport추가
ex) -sTOOLS=msvc-stlport

2)
stlport-iostream 사용시 -sBUILD에 on 추가
-sBUILD=on

3) -sSTLPORT_PATH="D:"

4) -sSTLPORT_VERSION=5.0.1

5) <stlport-cstd-namespace>global 는 컴파일하면서 vsprintf가 global namespace에 없다고에러가 발생해서 적어주었습니다.


-sBUILD
debug release
<runtime-link>static/dynamic
<threading>single/multi


install
기본 디렉토리 "c:\boost"
"--prefix=C:\Program Files\Microsoft Visual Studio\VC98"


참고
STLPort4.6.2, STLport 5.0.1, boost 1.33.1 (spirit설치)
STLport 4.6.2 설치하기 & boost 1.31 설치 (Ver.0.2)
vc2005,mingw,cygwin설치법 - redwinki
VC++ 2005 에 boost library 32bit & 64bit 설치하기
1.35 vc프로젝트로 설치하기
vc++에 boost설치법
boost 라이브러리 설치방법
Visual Studio 2008에서 Boost 1.39 설치하기
letsboost::Install - 번역 최흥배



Boost Unit Test 설정

boost 소개 - redwiki
Boost Libraries

:
Visual C++ 2005 및 이전 버전의 변경 내용 - MSDN

배포 방법 변경(Redistributable Package - 재배포패키지)과
최신라이브러리 사용
(2008)


1. 2005부터는 배포방법이 바뀌었다.
2. 2008에서는 sp1등의 업데이트를 설치해도 프로젝트 생성시 최신 라이브러리를 기본으로 사용하지 않는다.
 -> _BIND_TO_CURRENT_VCLIBS_VERSION를 미리 선언해야 최신 라이브러리를 사용한다.

위의 두가지 내용은 아래 페이지에 정리해놨음.
VC++ 버전별 배포방법과 재배포패키지(Redistributable Package)

Visual C++ 2005 라이브러리의 변경 사항 - MSDN

CRT 함수의 보안버전
Security-Enhanced Versions of CRT Functions - MSDN

warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

버퍼의 길이체크를 하기 위한 _s접미사가 붙는 보안 버전의 CRT 함수가 추가되었다. 사용방법은 기존 함수에 _s를 붙이고 버퍼의 길이를 인자로 더 추가해주면 된다. 당장은 VC에만 존재하지만 앞으로 C++표준에 추가될 수 있다고 한다.

참고사항
1. _s관련 함수는 errno_t를 반환하게 변경되었다.(에러발생)
2. _CRT_SECURE_CPP_OVERLOAD... 관련 3개의 define을 사용하면 버퍼가 배열형일 경우 Template overloads를 이용해서 기존 코드를 자동으로 _s관련 함수로 변경할 수 있다.

Default 값과 설명
_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1
  -> secure함수에 길이 인자관련을 생략해준다.
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 0
  -> 기존함수 지원 ex) strcpy
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 0
  -> 길이체크하는 기존함수 지원 ex) strncpy


위와같이 편한 방법이 있지만 포인터형의 버퍼변수 일경우는 기존과 같이 길이값을 인자로 넣어야 한다.
char  a[100];                    // 가능
strcpy_s(a, "hello");
char * p = new char[100]; // 불가능
(컴파일 에러)
strcpy_s(p, 10, "hello");

위와 같은 코드는 혼란만 올뿐이다. 결론은 secure함수를 사용할꺼라면 인자값을 사용하지말고 overload함수도 사용하지 말자.

해결방법
_CRT_SECURE_NO_DEPRECATE를 정의하면 secure함수를 사용하지 않는다.
또는
_CRT_SECURE_NO_WARNINGS 나 #pragma warning( disable : 4996 )를 사용해서
경고만 무시한다.

참고
http://blog.naver.com/kyuniitale?Redirect=Log&logNo=40021387400
C/C++ Secure Function 에 대해서
secure function 쉽게 사용하는 팁


POSIX 호환(compliant)
Deprecated CRT Functions - MSDN
warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _stricmp. See online help for details.

ISO C++의 명명 규칙을 준수하기 위해 POSIX 이름이 이제 사용되지 않는다. 예를 들어, getch 대신 _getch를 사용한다.
보안 함수와 똑같은 4996 경고가 뜬다. 표준이므로 지키자.

해결방법(임시)
_CRT_NONSTDC_NO_DEPRECATE를 정의하거나
#pragma warning( disable : 4996 )를 사용한다.

안전한 문자열 함수(strsafe.h)
Using the Strsafe.h Functions - MSDN
안전한 문자열 함수들(strsafe.h)

warning C4995: 'wsprintf': 이름이 #pragma deprecated로 표시되었습니다.

c/c++ 문자열의 오버플로우를 막기 위해 MS가 제공하는 방안으로 strsafe.h를 선언해서 관련 함수를 사용할 수 있다.

해결방법
#define STRSAFE_NO_DEPRECATE를 정의하거나
#pragma warning(disable : 4995)를 사용한다.

time_t
Time Management - MSDN
time_t가 기본 64비트로 변경되었다. (기존 32비트로 3000년까지만 처리 가능했던걸 확장)

실제선언코드
// VC6
// c:\Program Files\Microsoft Visual Studio\VC98\Include\TIME.H

#ifndef _TIME_T_DEFINED
typedef long time_t;        /* time value */
#define _TIME_T_DEFINED     /* avoid multiple def's of time_t */
#endif

/////////////////////////////////////////////////////////////////////////
// VC9(2008)
// c:\program files\microsoft visual studio 8\vc\include\crtdefs.h

#ifndef _TIME64_T_DEFINED
#if     _INTEGRAL_MAX_BITS >= 64
typedef __int64 __time64_t;     /* 64-bit time value */
#endif
#define _TIME64_T_DEFINED
#endif

문제점

이부분은 기존 long형으로 처리되던 부분들이 에러없이 자동으로 64비트로 변경되므로 32비트로 처리되던 코드들은 메모리주소가 밀려서 쓰레기값으로 처리될수 있다.

해결방법(임시)
_USE_32BIT_TIME_T 를 정의한다.
MSDN을 참고해보면 위와 같이 define해놓으면 time_t를 32비트로 쓸수 있다.

사용자 정의(User-Defined) 메세지

User-Defined Handlers - MSDN
아래 내용은 기존에 정의되어 사용되고 있던 것이지만 VC6에서 대충 넘어가던것을 2005부터는 정확하게 사용되어야 하는 것들이다.

1. ON_MESSAGE
MFC에서 사용자 정의 메세지를 사용시 User-Defined Handlers의 원형은 아래와 같은데
afx_msg LRESULT memberFxn( WPARAM, LPARAM );
VC6에선 반환값을 void형으로 선언하고 사용해도 문제가 없었지만 2005부터는 컴파일 에러가 발생한다

해결방법
1.
ON_MESSAGE를 ON_MESSAGE_VOID로 변경한다.
 -> AFXPRIV.H에 선언되어 있는 ON_MESSAGE_VOID를 사용하면 문제는 해결할 수 있지만 AFXPRIV.H파일 자체가 MFC 버젼이 바뀔경우 예고없이 바뀔 수 있는 파일이므로 조심해야하고 위매크로를 사용시 함수의 인자값이 이상하다는 글을 본적이 있으므로 사용시 주의하자. 매크로의 선언은 아래와 같다.(VC6,2008 sp1)
// like ON_MESSAGE but no return value
#define ON_MESSAGE_VOID(message, memberFxn) \
    { message, 0, 0, 0, AfxSig_vv, \
        (AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(void))&memberFxn },
2. LRESULT를 반환하게 함수를 변경한다.
 -> 이게 표준이니 이렇게 사용하자.


2. ON_THREAD_MESSAGE
ON_THREAD_MESSAGE - MSDN
CWinThread를 상속한 클래스내에서는 ON_MESSAGE가 아닌 ON_THREAD_MESSAGE를 사용해야한다.
사용법은 동일하지만 함수원형에 반환 값이 없다.
afx_msg void memberFxn( WPARAM, LPARAM );

매크로의 선언을 비교해보자.(AFXMSG_.H)
// for Windows messages
#define ON_MESSAGE(message, memberFxn) \
    { message, 0, 0, 0, AfxSig_lwl, \
        (AFX_PMSG)(AFX_PMSGW)(LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM))&memberFxn },

// for Thread messages
#define ON_THREAD_MESSAGE(message, memberFxn) \
    { message, 0, 0, 0, AfxSig_vwl, \
        (AFX_PMSG)(AFX_PMSGT)(void (AFX_MSG_CALL CWinThread::*)(WPARAM, LPARAM))&memberFxn },

Visual C++ 2005 컴파일러, 언어 및 도구의 변경 내용

for 루프 범위의 강제 규칙
/Zc:forScope(for 루프 범위의 강제 규칙) - MSDN
/Zc:forScope가 기본적으로 활성화되어 있다. 이부분은 VC6에서 비표준으로 지원 되던 부분의 수정이므로 표준을 준수하자.

해결방법(임시)
속성 -> 구성속성 -> C/C++ -> 언어 -> For 루프 범위 강제 규칙 -> 아니요
또는 #pragma conform(forScope, on) ,
컴파일 옵션에 /Zc:forScope
위방법중 하나를 선택하면 되겠다.

wchar_t
/Zc:wchar_t(wchar_t를 네이티브 형식으로 인식) - MSDN
/Zc:wchar_t가 기본적으로 사용된다.

속성 -> 구성속성 -> C/C++ -> 언어 -> wchar_t를 기본 제공 형식으로 처리 -> 아니요

error C2668(함수 오버로드)
함수 오버로드에 대한 묵시적 형변환을 사용할 수 없다. VC6에선 상관없던 코드가 최신툴에선 error를 발생한다.

error C2668: 'pow' : 오버로드된 함수에 대한 호출이 모호합니다.
error C2668: 'sqrt' : 오버로드된 함수에 대한 호출이 모호합니다.

위의 에러는  double pow(double x, double y)인 pow함수등을 pow(2,2)같이 호출했을때 발생한다. 이때는 형변환을 하거나 숫자뒤에 '.'를 표시해서 실수로 만들어준다. 표준이므로 지키자.

※표준 준수를 더욱 강화하기 위해 pow의 오버로드 double pow(int, int)가 제거되었습니다. - MSDN
-> int형의 인자를 받던 pow함수가 제거되었다. 그리고
_Pow_int라는 템플릿함수가 추가되었다.


VC 프로젝트 기본 설정

WINVER 설정
VC6프로젝트를 2005이상으로 업그레이드시 WINVER 가 정의 되지 않아 Default 값을 설정한다는 메세지를 볼수 있다.

WINVER not defined. Deafaulting to 0x0502 (Windows Server 2003)
-> 2008은 Vista가 기본이다.

VS2005이상으로 프로젝트를 새로 생성시는 stdafx.h에 #include "targetver.h"가 선언되며 이곳에 프로젝트가 최소로 지원하는 플랫폼을 정의해놨다.

참고
WINVER값이 잘못설정되어 있으면 API나 라이브러리에서 윈도우의 버젼이 잘못 설정되어 이상하게 동작하거나 에러가 발생할 수도 있으므로 업데이트 후 WINVER관련을 잘 체크하자.
->_WIN32_WINNT값을 0x0500으로 선언하고 필자의 경우 CFileDilog를 사용하면 error가 발생한다. 이유는 OPENFILENAME구조체의 선언때문인데 아래 링크를 참조하자.
MFC 프로젝트를 Visual C++ .NET 이나 대상 운영 체제에서 Visual C++ 2005 변경 이식 - MSDN

해결방법
Using the Windows Headers - MSDN

What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE? (구글번역)
-> 윈도우 버젼관련 매크로가 아래와 같이 진행되어온 과정을 설명해준다.(참고)

WINVER _WIN32_WINNT _WIN32_WINDOWS Product release
0x0400 not used 0x0400 Windows 95
0x0400 not used Windows NT 4.0
0x0410 not used 0x0410 Windows 98
0x0500 not used 0x0500 Windows Me
0x0500 not used Windows 2000
0x0501 0x0501 not used Windows XP
0x0502 0x0502 not used Windows Server 2003
0x0600 0x0600 not used Windows Vista

아래코드를 stdafx.h의 젤 윗부분에 선언해주면 되며 설정값을 변경하고 싶으면 위 MSDN링크를 참고한다.
#ifndef WINVER 
    #define WINVER 0x0400 
#endif                              

#ifndef _WIN32_WINNT  
    #define _WIN32_WINNT 0x0400 
#endif                        

#if (_MSC_VER > 1200) 
    #ifndef _WIN32_WINDOWS 
        #define _WIN32_WINDOWS 0x0410
    #endif
#endif    // _MSC_VER     

#ifndef _WIN32_IE   
    #define _WIN32_IE 0x0400 
#endif                              

Hotfix

912790
http://support.microsoft.com/kb/912790
2005의 버그인데 2008에도 똑같이 존재한다.

ANSI로 인코딩된 소스코드를 VS.NET 2005 (한글판)에서 빌드하면서 발생하는 문제로 일본판의 경우에도 비슷한 문제가 발생하였고 영문판 VS.NET 2005에서는 발생하지 않는 것으로 알려져있다. 그냥 무시해도 무방할 듯 하다.

해결방법
#pragma warning(disable: 4819) // <- 이 부분을 소스에 추가하거나.

2005버전 이상인 경우는 프로젝트 옵션에서
"프로젝트->속성->구성속성->C/C++->고급->특정 경고 사용 안함" 에 4819를 넣어주거나.

'파일->저장 고급 옵션'
"유니코드 - 코드페이지 1200" 형태로 저장하면 된다.


참고
http://blog.naver.com/khs01016?Redirect=Log&logNo=44587778
http://www.killereco.pe.kr/134


99%'s Code
위 정리된 사항을 필자는 아래코드로 헤더파일 하나에 넣고 stdafx의 상위에서 설정해서 사용한다.
sy는 필자 이름이므로 헷갈리지 말자 ㅎㅎ
// syDef.h

#pragma once

///////////////////////////////////////////////////////////////////////////////////////////////////////////
// 최소로 지원하는 플랫폼 정의

// Modify the following defines if you have to target an OS before the ones
// specified in the following code. See MSDN for the latest information
// about corresponding values for different operating systems.
#ifndef WINVER                // Permit use of features specific to Windows 95 and Windows NT 4.0 or later.
#    define WINVER 0x0400  // Change this to the appropriate value to target
#endif                        // Windows 98 and Windows 2000 or later.

#ifndef _WIN32_WINNT            // Permit use of features specific to Windows NT 4.0 or later.
#    define _WIN32_WINNT 0x0400    // Change this to the appropriate value to target
#endif                            // Windows 98 and Windows 2000 or later.          

#if (_MSC_VER > 1200)    // VC6 초과
#    ifndef _WIN32_WINDOWS                // Permit use of features specific to Windows 98 or later.
#        define _WIN32_WINDOWS 0x0410    // Change this to the appropriate value to target
#    endif
#endif    // _MSC_VER                        // Windows Millennium Edition or later.

#ifndef _WIN32_IE                // Permit use of features specific to Internet Explorer 4.0 or later.
#    define _WIN32_IE 0x0400    // Change this to the appropriate value to target
#endif                            // Internet Explorer 5.0 or later.

// #include "targetver.h" -> .net툴에서 위코드가 포함된 헤더파일
// http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx - Using the Windows Headers(MSDN)


///////////////////////////////////////////////////////////////////////////////////
// Visual C++ 8이상 세팅

//#define SYUTIL_USE_CRT_SECURE        // CRT 보안관련 함수 사용
#define SYUTIL_NOTUSE_NONSTDC_NO    // POSIX관련 CRT사용안함
#define SYUTIL_USE_32BIT_TIME_T        // time_t를 32비트로 사용함

// VC8(VS2005) 이상 컴파일러설정.
#if defined(_MSC_VER) && (_MSC_VER >= 1400)

    // 최신버젼의 VC라이브러리 사용
    // Redistributing an Application and Binding It to Specific Libraries - MSDN
    // http://msdn.microsoft.com/en-us/library/cc664727.aspx
#    ifdef _BIND_TO_CURRENT_VCLIBS_VERSION
#        undef _BIND_TO_CURRENT_VCLIBS_VERSION
#        define _BIND_TO_CURRENT_VCLIBS_VERSION 1
#    else
#        define _BIND_TO_CURRENT_VCLIBS_VERSION 1
#    endif

    // CRT 보안관련 라이브러리 설정
    // Security-Enhanced Versions of CRT Functions - MSDN
    // http://msdn.microsoft.com/ko-kr/library/wd3wzwts.aspx
#    ifdef SYUTIL_USE_CRT_SECURE
#        define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES            0
#        define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES            0
#        define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT    0
#    else
#        ifndef _CRT_SECURE_NO_DEPRECATE
#            define _CRT_SECURE_NO_DEPRECATE
            //#define _CRT_SECURE_NO_WARNINGS
            //#pragma warning(disable : 4996)
#        endif
#    endif // SYUTIL_USE_CRT_SECURE

    // POSIX관련 CRT 사용
    // Deprecated CRT Functions - MSDN
    // http://msdn.microsoft.com/en-us/library/ms235384.aspx
#    ifdef SYUTIL_NOTUSE_NONSTDC_NO
#        ifndef _CRT_NONSTDC_NO_DEPRECATE
#            define _CRT_NONSTDC_NO_DEPRECATE
            //#pragma warning(disable : 4996)
#        endif
#    endif // SYUTIL_USE_NONSTDC_NO

    // 안전한 문자열 사용(오버플로우 방지)
    // Using the Strsafe.h Functions
    // http://msdn.microsoft.com/ko-kr/library/ms647466(en-us,VS.85).aspx
#    define STRSAFE_NO_DEPRECATE
    //#pragma warning(disable : 4995)

    // time_t 64비트 처리
    // Time Management - MSDN
    // http://msdn.microsoft.com/ko-kr/library/w4ddyt9h.aspx
#    ifdef SYUTIL_USE_32BIT_TIME_T
#        define _USE_32BIT_TIME_T
#    endif // SYUTIL_USE_32BIT_TIME_T

    // 유니코드 형식으로 저장하라는 경고 무시 -> VS 버그임
    // http://support.microsoft.com/kb/912790
#    pragma warning(disable: 4819)
#endif // _MSC_VER



정리중...

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 문자 집합이 기본 유니코드이다.
속성 -> 구성속성 -> 일반 -> 프로젝트 기본값에서 문자 집합 -> 멀티코드 문자 집합 사용

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 런타임라이브러리(CRT)이 기본 /MD, CRT라이브러리에 대해서는 고민해보아야 하고
// 기존라이브러리들과 맞춰주는게 좋다.
속성 -> 구성속성 -> C/C++ -> 언어 -> 런타임 라이브러리 -> /MT

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 비증분 링크
LINK : warning LNK4076: '.\Debug/IIS.ilk' 증분 상태 파일이 잘못되었습니다. 비증분 링크합니다.

프로젝트 -> 속성 -> 링커 -> 일반 -> 증분 링크 사용 -> 아니요(/INCREMENTAL:NO)

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 증분 링크
LNK4075: '/EDITANDCONTINUE'이(가) '/INCREMENTAL:NO' 사양으로 인해 무시됩니다.

프로젝트 -> 속성 -> 링커 -> 일반 -> 증분 링크 사용 -> 예(/INCREMENTAL)

증분링크란?
obj를 합치는과정에서 메모리배치랑 순서 함수들 코드, 데이터 영역등을 계산하게 되는데 이걸 매번 재계산하게되면 시간이 오래 걸리게되죠
그래서 변한건만 재계산하는 과정을 말합니다. 위의 속성은 "증분 링크" 하겠다는거죠.간간히 이전obj가 껴있어 문제가 생기는데
이땐 rebuild all해서 풀링크 하면된다고 하네요 ^^;;
 
http://cafe.naver.com/bit1004/554
http://blog.naver.com/amoros21?Redirect=Log&logNo=140061746992
http://blog.naver.com/blue7water?Redirect=Log&logNo=10051860035
http://hongyver.pe.kr/ttblog/entry/VC6-%EC%97%90%EC%84%9C-VS2005%EB%A1%9C-%EC%98%AE%EA%B8%B0%EA%B8%B0
: