VC2008 짜투리 코드들

Posted by 빵빵빵
2009/01/15 00:01 전산(컴퓨터)/PC-Windows



출처 : http://myaustin.egloos.com/tag/VC2008/page/1

태그 : VC2008

알파 블랜딩을 적용한 DirectShow 필터 및 이미지 핸들링


Windows Embedded Developer Conference 2008 에서 발표한 
'알파 블랜딩을 적용한 DirectShow 필터 및 이미지 핸들링'의 PT와 샘플코드입니다.

PT20080430.pdf
samplecode.zip

# by 고재관 | 2008/05/01 11:34 | Mobile & Embedded | 트랙백 | 덧글(4)

윈도우즈 임베디드 CE 프로그래밍 입문 - 예제

# by 고재관 | 2008/03/18 11:20 | Book | 트랙백 | 핑백(1) | 덧글(0)

MFC 9.0 - 리본바 (Ribbonbar)


VC++ 2008에 기능이 보강되어 출시된 MFC 9.0의 대표적인 기능중의 하나가 바로 이 리본바입니다.
이 리본바에는 Visual Manager 라는 기능이 있어 스킨 변경이 쉽게 가능합니다. 











위의 그림 처럼 반방향 정렬하는 것도 가능합니다. 아랍권에서 쓰인다고 합니다.

아래의 그림 처럼 Office 2007의 기능을 하는 프로그램과 같이 리본바를 만들수 있습니다.
VC++ 2008만 쓴다면 이것을 사용 할 수 있으니 정말 좋습니다.

















# by 고재관 | 2008/03/17 03:28 | Visual C++ | 트랙백 | 덧글(0)

Visual C++ 2008 Feature Pack 예제 - VC++2008 Example

# by 고재관 | 2008/03/17 02:44 | Visual C++ | 트랙백 | 덧글(3)

HEROES happen here 발표자료 - Visual C++ 2008 Update & Upgrade

HEROES happen here 발표자료 - Visual C++ 2008 Update & Upgrade

3월 20일에 진행한 세션자료와 샘플코드를 올립니다.

VC2008Update.pdf   
VistaMFCSample.zip
UpgradeSample.zip

3월 25일 부산행사 샘플올립니다.
없는 자료는 3월20일 행사 자료와 동일합니다.

DesktopAlertDemo.zip
DlgToolTips.zip
ExamCtrl.zip
MSOffice2007Demo.zip
NewControls.zip
OutlookDemo.zip
RibbonMDI.zip
VisualStudioDemo.zip

# by 고재관 | 2008/03/19 23:20 | Visual C++ | 트랙백(1) | 덧글(9)

과거와 미래

제가 처음 컴퓨터를 알게 된 것이 초등학교 3학년 때인 1983년입니다. 제가 전자에 관심이 많았는데 컴퓨터는 그야 말고 신기한 기계였죠. 1984년부터 본격적으로 컴퓨터를 다루기 위해서는 프로그래밍을 할 수 있어야 한다는 것을 알았고 본격적인 독학의 길로 들어섭니다. 당시에 처음 만져본 기종이 MSX방식의 SPC-800이었습니다. 8비트 컴퓨터에는 우리가 알고 있는 운영체제가 바로 보이지 않고, 지금 Microsoft의 빌게이츠 회장이 만든 ROM-BASIC인 BASICA가 설치되어 있었습니다. 그래서 별도의 운영체제의 개념은 없이 프로그래밍만 해야 하는지 알았죠. 빌게이츠 회장이 PC용으로 포팅한 BASIC은 원래 대형시스템에서만 사용하는 것입니다. 이를 PC에 포팅한 것이죠. 다른 것은 몰라도 이러한 노력이 Microsoft의 밑거름이 되었다는 것을 부정할 수는 없을 것입니다. 
여하튼 MSX는 곧바로 ROM-BASIC를 작성하는 화면이 나타났습니다. 그것을 바로 프로그램을 하는 화면이죠. 컴퓨터는 키면 곧바로 그 화면이 나타나 커서가 깜박깜박였으니 당연히 프로그래밍을 해야 하는지 알았죠. 그렇게 해서 후에 GW-BASIC과 Quick-BASIC으로 해서 Visual Basic까지 이어지는 BASIC언어에 첫발을 들어 놓았고 그것이 저의 취미가 되었죠. 그러다 상업적인 목적으로 프로그램 개발을 시작한 것이 1992년 이었습니다. 빨랐죠? 그 때 제 나이 19살인가 그랬을 것입니다. 원래는 항공사에 취직했고 여기서 항공기정비와 제조에 관련한 일을 했습니다. 그런데 인생을 살면서 누구나 한번쯤 하는 경험으로 인해 모든 것을 버리고 경남 김해에서 서울로 올라와 버립니다. 
그러고 할 일을 찾아보니 제가 프로그래밍을 할 수 있었습니다. 취미가 직업이 된 것이죠... 당시에 제가 사용하던 언어는 dBaseIII+에 Database핸들링을 위해 사용하던 언어를 컴파일 해서 사용하는 Clipper를 사용했습니다. 우리말로 클리퍼라고 부르죠. DOS시절에는 이언어가 지금의 Visual Basic이나 .NET Framework보다도 영향력이 있었으니 당시에는 위력적이었죠. 후에 CAI사가 인수해서 CA-Clipper로 바뀌었지만 Windows용 버전인 Visual Object의 발매가 늦어지면서 시장에서 사장되고 맙니다. 개발자들이 기다리다 지쳐서 Visual Basic으로 모두 갈아타 버린것이죠. 전 아직도 이 언어가 그립습니다. 코드 조금 선보이면 다음과 같습니다. 찾아보니 소스가 꽤 있더라구요.

...
WHILE(.T.)

    IF ( OBW13:COLPOS <= OBW13:FREEZE )
         OBW13:COLPOS := OBW13:FREEZE + 1
    ENDIF

    OBW13:FORCESTABLE()
    OBW13:HILITE()

    OBW13KEY := LOADKEY(0)

    DO CASE
       CASE OBW13KEY == 13
            SELECT _QC13
            SUB_C13(S_SUM1,S_SUM2,SIMSI1)
            SELECT _WC13
            OBW13:REFRESHALL()
       CASE OBW13KEY == K_ESC       ; EXIT
       CASE OBW13KEY == K_UP        ; OBW13:UP()
       CASE OBW13KEY == K_DOWN      ; OBW13:DOWN()
       CASE OBW13KEY == K_PGUP      ; OBW13:PAGEUP()   ; OBW13:REFRESHALL()
       CASE OBW13KEY == K_PGDN      ; OBW13:PAGEDOWN() ; OBW13:REFRESHALL()
       CASE OBW13KEY == K_CTRL_PGUP ; OBW13:GOTOP()    ; OBW13:REFRESHALL()
       CASE OBW13KEY == K_CTRL_PGDN ; OBW13:GOBOTTOM() ; OBW13:REFRESHALL()
       CASE OBW13KEY == K_RIGHT     ; OBW13:RIGHT()
       CASE OBW13KEY == K_LEFT      ; OBW13:LEFT()
       CASE OBW13KEY == K_TAB       ; OBW13:RIGHT()
       CASE OBW13KEY == K_SH_TAB    ; OBW13:LEFT()
       CASE OBW13KEY == K_HOME      ; OBW13:PANHOME()
       CASE OBW13KEY == K_END       ; OBW13:PANEND()
       CASE OBW13KEY == K_F12
            SEL := RECNO()
            F12PRINT('Q13')
            GO SEL
            OBW13:REFRESHALL()
    ENDCASE
ENDDO

...

FUNCTION NUM2HANIS(X)
 LOCAL XX
 DO CASE
    CASE X = 1 ; XX := '일'
    CASE X = 2 ; XX := '이'
    CASE X = 3 ; XX := '삼'
    CASE X = 4 ; XX := '사'
    CASE X = 5 ; XX := '오'
    CASE X = 6 ; XX := '육'
    CASE X = 7 ; XX := '칠'
    CASE X = 8 ; XX := '팔'
    CASE X = 9 ; XX := '구'
 ENDCASE
RETURN(XX)


C언어와 문법 체계가 비슷합니다. 비교연산자와 논리연산자 앞뒤에 .을 찍는 것이 특이하죠? TRUE를 .T.로 ||를 .OR.로 표기하는 것이 다릅니다. ALGOL이라는 언어의 영향을 받아 C언어에서 사용하는 = 를 여기서는 :=로 사용합니다. == 는 똑 같습니다. switch...case문이 DO CASE와 동일합니다. break없이 해당 블록만 실행하고 빠져 나오기 때문에 편리합니다. NUM2HANIS는 함수인데 넘겨준 숫자 값을 문자열로 반환해 주는 함수입니다. LOCAL이라고 선언한 것은 LOCAL내에서만 쓴다는 것을 선언 한 것인데 언 듯 이해가 안가시죠? PRIVATE나 PUBLIC으로 선언하면 자신의 함수가 종료해도 변수가 존재하고 다른 함수에서 이를 사용할 수 있습니다. 메모리 관리를 알아서 해주니 뭐 걱정 안해도 됩니다. 좀더 특이 한 것은 변수의 형태가 지정되지 않는 다는 것이죠. 숫자 넣은 변수에 문자를 넣으면 문자열 변수로 바뀝니다. 정말 편리하죠? 변수 사용에 필요한 메모리관리 뿐 아니라 변수의 형태자체도 매번 자동으로 변경해 주니 정말 편리하게 개발이 가능했던 언어입니다.
편리한 것도 편리한 것이지만 언어의 형태가 C언어와 유사해서 인지 저는 쉽게 C언어로 옮길수 있었고 다른 많은 개발자들과 달리 Visual Basic을 하지 않고 Visual C를 하게 되는 특이한 과정을 거치게 됩니다. 
C언어를 하면서 C언어로 할 수 있는 다양한 경험을 한 것 같습니다. 공장자동화 같은 제어나 MIS프로그램 지원 같은 업무같은 것에서 휴대용 단말기 까지... 개발툴도 여러 가지 사용해 봤습니다. Turbo-C , Borland-C같은 툴은  기본이고 Microsoft의 MS-C , 함수가 단 1개도 없이 for, while, if 문 같은 기본 구문만 지원하는 Hitechi-C까지 참 다양한 C언어를 경험하고 힘들어 했던 것 같습니다. 
세월이 지나 저는 휴대용단말기 시장에 새로운 태풍이 떠오를 것을 감지했습니다. 1998년에 발견한 Microsoft의 Windows CE입니다. 휴대용단말기 시장의 구조나 내용을 자세히 알고 있던 저로서는 이 것이 이 시장에 미칠 파장을 충분히 짐작하고 남았죠. 저는 곧바로 전환했고 몇 년간 힘들었지만 2001년 국내 처음으로 Windows CE개발 서적을 내는데 성공합니다. 그것이 계기가 되어 저는 지금은 Windows CE 응용프로그램 전문가로 통하죠. 사실 전 그것만 잘하는 것은 아닙니다. Server용 프로그램 개발이나 PC용 프로그램도 잘하는데 다들 저는 Windows CE만 할 줄 아는 줄 아시더라구요. 뭐가 되었던 괜찮습니다. 그 중심엔 Visual C++가 있습니다. 어느 것을 하던 이것을 꼭 사용하거든요. 앞으로도 이 것을 유지될 것입니다. 
이러는 제가 새로 나올 Visual C++ 2008에 얼마나 많은 기대를 하고 있겠습니까? 꼼꼼히 기능도 살펴보고 하고 있겠죠.


여러분도 경험해 보세요~

# by 고재관 | 2008/02/11 19:57 | Visual C++ | 트랙백 | 덧글(3)

Visual Studio 2008 한글판 Professional

한글판이 드디어 올라 왔습니다.
90일간 제약없이 사용 할 수 있습니다.
이제 새로운 VS2008의 세계로 들어오세요~

Visual Studio 2008 Professional Edition(90일 평가판)
http://www.microsoft.com/downloads/details.aspx?FamilyID=83c3a1ec-ed72-4a79-8961-25635db0192b&DisplayLang=ko


MSDN Library for Visual Studio 2008
http://www.microsoft.com/downloads/details.aspx?FamilyID=6ff3bc60-32c8-4c22-8591-a20bf8dff1a2&DisplayLang=ko



# by 고재관 | 2008/02/08 20:03 | Visual C++ | 트랙백 | 핑백(2) | 덧글(3)

윈도우즈 임베디드 CE 프로그래밍 입문


정보문화사에서 2008년 3월 15일 출간도서인 '윈도우즈 임베디드 CE 프로그래밍 입문'과 관련하여 해당 예제를 작성 하고 테스트 하는데 필요한 프로그램은 다음과 같습니다.

출판사링크
http://www.infopub.co.kr/bookinfo/bookinfo.asp?sku=08000039



























■준비사항

이 책의 예제를 작성하고 테스트하기 위해서는 다음과 내용이 필요하다.
 -데스크탑
 -Visual Studio 한글판 Professional
 -Software Development Kit
 -동기화도구
개발에 필요한 기본파일은 다음의 사이트로 다운로드 받을 수 있다. 한글 사이트로는 검색되지 않는 파일이 많으므로 영문 사이트도 같이 검색하기를 권한다. 
http://www.microsoft.com/downloads/Search.aspx?displaylang=en
http://www.microsoft.com/downloads/Search.aspx?displaylang=ko
다운로드 사이트 및 책의 예제에서 다루는 이미지나 관련 파일을 포함하여 예제를 작성하고 테스트하는데 필요한 파일은 다음의 웹사이트를 통해 관련 정보를 확인하거나 다운로드받을 수 있다.
http://myaustin.egloos.com/1732531
http://www.infopub.co.kr/   

■ 데스크탑

개발도구를 설치하기 위해서는 다음의 사양에 맞는 데스크탑을 사용하기를 권한다. 절대적인 사양은 아니지만 최소 수준이다.
1GHz Pentium 이상의 프로세서
256MB이상의 메모리
2GB~4GB정도의 여유공간이 있는 하드디스크드라이브
1024x768이상의 해상도를 가진 하이컬러-16비트를 지원하는 디스플레이
106키의 키보드와 유연한 마우스
인터넷
Windows XP 운영체제(서비스팩 2) 혹은 Windows Vista 운영체제
시스템 보호를 위해 백신을 반드시 설치하기를 바라며 무료백신은 다음 사이트를 통해 설치할 수 있다.
http://www.boho.or.kr/index.html

■ Visual Studio 2008 한글판 Professional

최신버전인 Visual Studio 2008 버전을 사용하는 것이 앞으로 개발환경에 적응하는데 도움이 될 것으로 생각한다. 상황이 허락한다면 Visual Studio 2008사용을 권한다. 2008을 사용하기 어려운 상황이라면 2005버전을 사용해도 무방하다.
Visual Studio 2008 한글판 Professional 90일 평가판
http://www.microsoft.com/downloads/details.aspx?FamilyID=83c3a1ec-ed72-4a79-8961-25635db0192b&DisplayLang=ko
MSDN라이브러리
http://www.microsoft.com/downloads/details.aspx?FamilyID=6ff3bc60-32c8-4c22-8591-a20bf8dff1a2&DisplayLang=ko

■ Visual Studio 2005 한글판 Professional

Visual Studio 2008뿐 아니라 2005버전도 사용할 수 있다. 2008로 작업하는데 전혀 문제가 없으며 2005버전으로도 문제 없으므로 상황에 맞춰 사용할 수 있다.
Visual Studio 2005 한글판 Professional 90일 평가판
http://www.microsoft.com/downloads/details.aspx?FamilyID=b2c27a7f-d875-47d5-b226-e2578a116e12&DisplayLang=ko
Visual Studio 2005 서비스팩 1
http://www.microsoft.com/downloads/details.aspx?FamilyID=bb4a75ab-e2d4-4c96-b39d-37baf6b5b1dc&DisplayLang=ko
Visual Studio 2005 서비스팩 1 업데이트 (Windows Vista 전용)
http://www.microsoft.com/downloads/details.aspx?FamilyID=90e2942d-3ad1-4873-a2ee-4acc0aace5b6&DisplayLang=ko
Microsoft SQL Server 2005 Compact Edition
http://www.microsoft.com/downloads/details.aspx?FamilyID=e9aa3f8d-363d-49f3-ae89-64e1d149e09b&DisplayLang=ko
Microsoft SQL Server 2005 Compact Edition 업데이트
http://www.microsoft.com/downloads/details.aspx?FamilyID=877c0adc-0347-4a47-b842-58fb71d159ac&DisplayLang=ko
MSDN라이브러리 업데이트
http://www.microsoft.com/downloads/details.aspx?FamilyID=b8704100-0127-4d88-9b5d-896b9b388313&DisplayLang=ko

■ Software Development Kit

다양한 SDK(Software Development Kit)를 설치하고 테스트 할 수 있다. 반드시 1개는 설치하여야 하지만 원하지 않는다면 개발도구에 기본 포함된 SDK를 사용할 수 있다. 단 예전 버전이라 기능이 부족하므로 이를 참고해야 한다.
이 책은 Windows Mobile 6 Professional로 작성되었다.  Windows Embedded CE는 SDK가 정형화되어 있지 않아 부득이하게 Windows Mobile 기반의 SDK를 사용한다. 에뮬레이터의 성능이나 기능이 Windows Embedded CE를 학습하는데 손색이 없다. 강의나 교육시 다른 SDK를 사용하여도 기능엔 거의 차이가 없으므로 상황에 맞춰 적용하기 바란다. 다음은 일반적으로 사용하는 SDK다운로드 사이트이다. 
Windows Mobile 6 Professional SDK
http://www.microsoft.com/downloads/details.aspx?FamilyID=06111a3a-a651-4745-88ef-3d48091a390b&DisplayLang=en
Windows Mobile 6 Professional SDK용 에뮬레이터 한글이미지 
http://www.microsoft.com/downloads/details.aspx?FamilyID=38c46aa8-1dd7-426f-a913-4f370a65a582&DisplayLang=en
Windows Mobile 5.0 PocketPC 2005 SDK
http://www.microsoft.com/downloads/details.aspx?FamilyID=83a52af2-f524-4ec5-9155-717cbe5d25ed&DisplayLang=en
Windows Mobile 5.0 PocketPC 2005 SDK용 에뮬레이터 한글이미지 
http://www.microsoft.com/downloads/details.aspx?FamilyID=eec33ae3-c129-4c25-abaa-18e8e842178f&DisplayLang=en
SDK설치 후 다음의 설정을 확인한다. 설정에 다라 에뮬레이터가 실행되지 않으므로 이를 반드시 수정해 주기 바란다. 
데스크탑의 바탕화면에서 '내 컴퓨터'→'속성'→시스템등록정보→'고급'탭→'시작 및 복구'의 '설정'버튼→'편집'버튼→'편집'을 누르면 나타나는 메모장의 /noexecute부분을 /execute로 수정

■ 동기화도구

동기화 도구를 설치하며 다양한 테스트가 가능하다. ActiveSync를 설치하여야 한다. Windows Vista운영체제의 데스크탑은 ActiveSync를 설치 할 수 없으므로 Windows Mobile Device Center를 설치한다.
ActiveSync 4.5
http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=9e641c34-6f7f-404d-a04b-dc09f8141141
Windows Mobile Device Center 6.1
http://www.microsoft.com/downloads/details.aspx?FamilyID=46f72df1-e46a-4a5f-a791-09f07aaa1914&DisplayLang=ko

■ 동기화도구

코드작성을 도와줄 Visual Assist X 라는 개발도구는 다음 사이트를 통해 다운받을 수 있다.
http://www.wholetomato.com/downloads/downloadTrial.asp
Mobile Device관리를 편리하게 도와주는 Pocket Controller는 다음사이트를 통해 다운로드 가능하다. 사이트에 들어가면 몇 가지 개인정보를 입력해야 다운로드가 가능하다.
http://www.soti.net/default.asp?Cmd=Products&SubCmd=pcprodnld

■ 예제

책에 사용된 예제는 출판사 홈페이지나 다음 링크를 통해 다운로드가 가능하다.
http://myaustin.egloos.com/1801959


이 책을 통해 임베디드 소프트웨어에 관심을 갖게 된 독자들이 한 사람이라도 늘어난다면 이 분야에 강의 및 종사하는 사람으로 매우 기쁠 것이다. 궁금하거나 부족한 점이 있으신 독자라면 누구나 다음 이 메일이나 다음 사이트를 통해 마음껏 의견을 개진해주시기 바란다.

jylim@bible.ac.kr
myaustin@korea.com 
http://myaustin.egloos.com
http://www.pdalab.org/

# by 고재관 | 2008/02/03 14:01 | Book | 트랙백 | 핑백(2) | 덧글(2)

VC++ 2008 Feature Pack (Beta)


드디어 나왔습니다.
문서상으로만 예기가 되었던 MFC 9.0의 기능을 맛볼수 있는 팩이 출시되었습니다.
물론 아직 Beta이지만 계속 수정해서 3월 20일 출시에 맞춰 정상 버전으로 거듭날것으로 생각합니다.

다음 링크로 들어가시면 다운로드 가능합니다.

http://www.microsoft.com/downloads/details.aspx?FamilyID=D466226B-8DAB-445F-A7B4-448B326C48E7&displaylang=en

그런데 설치하시는 분들중에 실패하시는 분이 계실것으로 추측됩니다.
저도 처음 실피하는데 거의 다 되고서는 계속 실패하더라구요.
가장 최근에 릴리즈된 Visual Studio 2008로 재설치하신후 설치하시면 아주 잘됩니다.
해보시고 다른 문제 있으면 알려주세요.

^^ 아참.
이제는 저혼자 보는 것이 아닌 여러분과 공유하기 위해 존대말을 쓰기로 했습니다.
잘했죠? ^^

# by 고재관 | 2008/01/14 23:58 | Visual C++ | 트랙백 | 덧글(0)

.NET JumpStart - 온사이트 세미나 및 기술자문 프로그램

# by 고재관 | 2008/01/08 02:03 | Visual C++ | 트랙백 | 덧글(0)

VC++ 개발자를 위한 VS 2008 - 발표자료


2008년 1월 6일 발표한 세미나의 발표자료와 데모코드이다.
모두에게 도움이 되는 자료이기를 바랄뿐이다.

VC2008New.pdf
VC2008Upgrade.pdf
Sample_TEST.zip
Sample_Conversion.zip

# by 고재관 | 2008/01/06 13:43 | Visual C++ | 트랙백 | 핑백(1) | 덧글(0)

VS 2008 Community Heroes



 
한국 기업 개발자 50% 이상이 사용하는(KRG 조사 자료) Visual Studio가 더욱 강력해진 기능과 
라인업으로 3월 여러분 앞에 선보입니다. 전세계 다른 개발자보다 한 발 앞서 준비하실 수 있도록, 
국내 최고 전문가인 MVP들과 함께 VS 2008 Community Heroes 세미나를 2달에 걸쳐 진행합니다. 

시대가 바뀌어도 변하지 않을 여러분의 경쟁력은 최신 기술에 대한 한 발 앞선 준비와 꺼지지 않는 
정열입니다. 
VC++, VB, VC#, ALM, 웹과 SOA 개발자를 위해 각 시리즈 별로 준비된 세미나를 확인하시고 
차가운 머리와 뜨거운 가슴을 가지고 오시기 바랍니다.
 
1월 6일
VC++ 개발자를 위한 VS 2008 (오전)
Visual C++ 2008의 멀티쓰레딩 디버깅 소개 (오후)
1월 12일
VB 개발자를 위한 VS 2008
1월 19일 VC# 개발자를 위한 VS 2008
1월 26일 초보 개발자를 위한 ALM과 VSTS 2008
2월 16일 데이터 최적화를 위한 VS 2008 (오전)
2월 23일 웹 개발을 위한 VS 2008 (오전)
2월 24일 SOA 개발을 위한 VS 2008
 
모든 세미나는 대치동 포스코센터 서관 5층 한국마이크로소프트 Realizing & Potential 룸에서 진행됩니다.
세미나 등록하신 분만 참석하실 수 있으며, 다른 분을 위하여 꼭 참석하실 분만 등록해주시기 바랍니다.
주차지원이 되지 않으니 대중교통을 이용해주시기 바랍니다.
세미나에 참석하시는 모든 분에게 .NET Framework 3.5 리소스 포스터 4종과
Visual Studio 2008 Training Kit CD를 드립니다.
세미나에 참석하신 분을 위해 무선키보드 세트 등의 경품추첨을 준비하였습니다. 
2009/01/15 00:01 2009/01/15 00:01

try catch macro 만들기

Posted by 빵빵빵
2009/01/03 17:32 전산(컴퓨터)/PC-Windows



원문 http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=735200&ref=735200 try..catch문을 알아보던 중..
이런 코드를 보게 되었는데요.



참고로 appUnwindf란 함수는 로그를 남기거나 하는 함수 같아요. 질문은 보통 try문안에서 throw를 사용해서 catch문안에서 처리를 하는 걸로 아는데.
위 guard, unguard로 뭘 할려고 하는건지 모르겠네요. 참고로 이렇게도 사용하더라고요.



아시는 분 답변 부탁드립니다.
 
 
 
 [답변]@.@ 2008-07-31 오전 9:47:41
 
권진호 (crowback__)    번호: 735204   / 평점:  (-)  

try ~ catch 에 대하여 어느정도 알고 계시다면 코드를 풀어보면 금방 이해하실 겁니다.
매크로에 #인자 <= 요런 구조는 문자열로 치환해주는 구조입니다. 풀어보면 다음과 같습니다.



 코딩이 지저분해 지니, 매크로로 감싸서 깔끔하게 보이려고 처리해 놓은듯 하네요.
 
 ===========================================================================================
 [실전프로그래밍-3]
 
TRY CATCH 문을 생활화하자.

보통 실무에서의 프로젝트는 공부할 때와는 달리 크기가 방대하다.

따라서, 시간이 지나면 지날수록 그 복잡성은 증가할 수 밖에 없다.

이 방대함과 복잡성에서 버그를 줄이기 위해 프로그래머들이 택할 수 있는 유일한 방법은 잘 정리 정돈하는 것, 그리고 주석과 진단 매크로 등으로 도배하는 것이다.

그 중 아주 효율적인 방법중의 하나가 try catch 문을 생활화하는 것이다.  

C 에 입문하는 모든 사람에게 GO TO 문은 사용하지 말아야 하는 것으로 거의 불문율처럼 여겨진다.

이는 GOTO 문의 남발이 코드의 복잡성을 증가시키기 때문이다.

그러나, 참 아이러니하게도 GOTO 문은 코드를 대폭 간결하게 처리할 수 있는 방법이기도 하다.

특히 에러처리에 있어서는 GOTO 문은 그 진가를 발휘한다.

그래서 그 대안으로 try catch 문을 제공하는 것이다. 다음 문장을 살펴보자.



위 문장을 try catch 문으로 다시 정리해 보면 아래와 같다.



  코드의 양도 양이지만, A->B->C->D 로 작업이 진행된다는 코드의 판독성이 상당히 증가하는 걸 알 수 있다.

  일단 예외처리에 관한 기본적 지식은 관련 서적이 많으니 참고하길 바라고, 여기에서는 MFC에서 제공하지만 쓰기에는 약간 불편한 CException 클래스를 확장하여 좀더 편리하게 사용할 수 있는 방법에 대해 알아보기로 한다.

  보통 try catch 문을 사용하면 아래와 같다.


 
오류 메시지는 “사용가능한 오류메세지가 없습니다.” 이다.

오히려, 사용하기 더 어렵게 되었다는 것을 느낄 것이다.  

그러나 CException 는 기초클래스일 뿐이고 ReportError () 함수 또한 가상함수로 만들어져 있어 사용자가 이를 확장하여 쉽게 처리할 수 있음을 암시하고 있다.
 
자 이제 우리는 CException 클래스에서 상속받아 확장된 CExceptionEx 를 만들것이다.  

목적은 코드를 좀더 간결하게 처리하고, 원하는 에러 메시지를 효과적으로 발생시킬 수 있도록 하는것이다.
 
간략히 처리하기 위해서는 CExceptionEx* const e = new CExceptionEx (TRUE, “에러메세지”); 로 처리할 수 있도록 클래스를 정의해야 한다.
 
먼저 에러 메시지를 담을 CString 멤버 변수를 하나 갖고, 생성자를 추가한다.
 
다음 가상함수 ReportError () 에서 추가한 CString 변수를 출력하도록 처리한다.
 
우선 CExceptionEx 의 클래스 정의를 살펴보면 다음과 같다.




다음으로 ::AtxThrowXXXException () 처럼 전역함수를 만들어 사용해야 한다.

이는 다음과 같이 정의하였다.
 


이는 리소스의 스트링 테이블의 문자열도 이용할 수 있고, 인자를 갖는 문자열을 사용할 수 있도록 처리하였다.

에러 메시지 박스 출력에 관련된 함수도 자신만의 예쁜 메시지 박스나, 스트링 테이블을 이용할 수 있고, 인자를 갖는 문자열을 이용할 수 있도록 전역적으로 정의하자.

이와 관련된 함수 정의는 아래와 같다.



구현부는 별로 어렵지 않게 만들어져 있으므로 아래에서 다운 받아 확인해 보면 된다.

http://myhome.konetic.or.kr/UserUploadData/gobuksun/ExceptionEx.cpp http://myhome.konetic.or.kr/UserUploadData/gobuksun/ExceptionEx.h

자, 그럼 어떻게 TRY CATCH 문을 사용하게 되었는지 예로 살펴보자.

만일 리소스 스트링 테이블에



이와 같이 사용 할 수 있다.

자신이 맡은 프로젝트의 성격에 따라, 에러 메시지 뿐만 아니라 에러 번호 같은 것을 멤버변수로 두어 각기 다르게도 처리할 수 있을 것이다.

실무에서 수많은 버그를 방지하는 방법은 빠져 나갈 수 있는 구멍을 철저히 막아버리는 것이다.

약간 귀찮아 보이지만 버그와 에러를 방지하는 방법으로써 Stdafx.h 파일에 #include "ExceptionEx.h"를 추가하고 TRY CATCH 문을 사용해보자.

PS) 글을 쓰다보니 TRY CATCH 문이 만능인것처럼 보일수가 있겠네요..
아래 리플 달아주신 분들 감사합니다. 몇자 변경했습니다.
역시 논란이 있는부분입니다.
예외처리의 남용은 자칫 성능의 훼손이나 혹은 판독성마저 훼손할 수 있으니까 여러분 나름대로의 판단이 요구되는 부분이겠습니다.. ^^*
2009/01/03 17:32 2009/01/03 17:32

http 다운로드 블럭킹 안되게 처리하는 방법

Posted by 빵빵빵
2009/01/03 15:36 전산(컴퓨터)/PC-Windows



인터넷에서 파일을 다운로드 받는 URLDownloadToFile을 사용할 수 있다.
 
API 한 번 호출하는 것만으로 파일을 받을 수 있다니 얼마나 훌륭한가?

그런데, 이 URLDownloadToFile을 사용하다보면, 가끔 파일을 받지를 못하고 블럭킹 되는 수가 있다. (만건중 11번 경험) 이 블럭킹 되는 것을 막기위해서 다음과 같이 프로그램 로직을 추가하였다.


1. 다운로드 하는 곳을 쓰레드로 돌린다.

2. URLDownloadToFile에 IBindStatusCallBack을 넣어서, OnProgress가 불려지지 않으면 블럭킹으로 간주한다.

3. 다운로드 함수에서는 블럭킹을 감지하거나, 다운로드가 끝나기를 기다린다.

숏달..




2009/01/03 15:36 2009/01/03 15:36