Part 1. 업그레이드에 대한 소개 Chapter 1. Visual Basic .NET은 Visual Basic 7 이상의 의미 왜 호환성이 지원되지 않는가? ... 27 신기능 추가 ... 27 개발 언어 수정 ... 28 개발 언어를 현대적으로 ... 29 그래도 Visual Basic은 Visual Basic ... 29 미묘한 차이 ... 30 95%의 자동화된 업그레이드를 위한 계획 ... 31 왜 업그레이드를 해야 하는가? ... 32 개발 언어의 신기능들 ... 32 윈도우 폼 ... 37 새로운 웹 개발 기능들 ... 38 더욱 향상된 개발 환경 ... 39 Visual Basic은 Visual Basic 개발자에게 여전히 최상의 선택인가? ... 41 결론 ... 43 Chapter 2. Visual Basic 6과 Visual Basic .NET의 차이 .NET Framework vs. ActiveX ... 46 .NET Framework ... 47 메모리 관리 ... 49 형 정체성(Type Identity) ... 53 스레딩 모델 ... 57 개발 환경에서의 차이점 ... 58 메뉴 편집기 ... 58 도구 상자 ... 60 속성 창 ... 62 탭 순서 편집기 ... 63 폼 패키지(Forms Packages) ... 64 윈도우 폼의 단일 표준 ... 64 한번의 수고로 두 개의 폼 패키지 이용 ... 64 개발 언어의 차이점 ... 65 모든 서브루틴 호출은 괄호로 처리되어야 한다 ... 68 ByVal 또는 ByRef가 필요하다 ... 68 이것이 나의 이벤트? ... 69 배열은 하한이 0이어야 한다 ... 71 고정 길이 문자열은 지원되지 않는다 ... 71 Variant 데이터 형은 제거되었다 ... 72 중첩 범위(Nested Scopes)에서 선언된 변수의 가시성은 한정되어 있다 ... 73 디버거에서 바뀐 점 ... 74 Edit and Continue 기능이 없다 ... 74 에러 발생 후에는 계속 진행할 수 없다 ... 75 중단 모드에서는 다시 그려지지 않는다 ... 75 결론 ... 76 Chapter 3. 업그레이드 옵션 업그레이드는 필수가 아닌 선택 ... 78 업그레이드하지 않는 경우 ... 78 부분적인 업그레이드를 하는 경우 ... 79 완전히 업그레이드시키는 경우 ... 80 상호 연동성을 부여한 업그레이드 ... 80 업그레이드 마법사의 역할 ... 81 업그레이드 보고서 ... 81 테스트 ... 82 Visual Basic 6 이전 버전에서의 업그레이드 ... 83 업그레이드할 프로젝트 선택 ... 84 장점 평가하기 ... 85 업그레이드에 필요한 요소 평가하기 ... 90 업그레이드 계획 만들기 ... 93 결론 ... 94 Chapter 4. 프로젝트를 Visual Basic .NET으로 업그레이드하기 위한 준비 왜 변경해야 하는가? ... 96 레거시 코드를 간결하게 만든다 ... 96 VarPtr, Deflnt와 사라지 사라진 것들 ... 97 DAO와 RDO 데이터 바인딩 ... 98 좋은 Visual Basic 6 코딩 습관 ... 99 Variant와 변수 ... 99 추상화(Abstraction) ... 101 얼리 바인딩 vs. 레이트 바인딩 vs. 소프트 바인딩 ... 105 Null과 Empty에 대하여 주의하자 ... 110 묵시적인 객체 인스턴스화(Instantiation) ... 111 결론 ... 115 Part 2. 애플리케이션 업그레이드 Chapter 5. 첫 번째 업그레이드 메모 ... 118 업그레이드 연습 ... 120 어떤 일이 일어났는가? ... 126 개발 언어의 변화 ... 130 프로젝트의 다른 파일들 ... 136 프로젝트 그룹 업그레이드하기 ... 138 커맨드 라인을 사용하여 업그레이드하기 ... 142 결론 ... 144 Chapter 6. Visual Basic .NET에서의 일반적인 작업 Visual Basic .NET에서의 작업에 대한 가이드 ... 146 Visual Basic .NET 프로젝트 만들기 ... 147 Visual Basic .NET IDE 배우기 ... 149 프로젝트 실행하기 ... 151 디버깅에 대한 간단한 설명 ... 152 그 밖의 항목들 ... 154 빌드 에러 처리하기 ... 154 작업 목록 사용하기 ... 155 중단점(Breakpoint) 사용하기 ... 156 참조(References) ... 156 문제를 해결하는 기법 ... 158 System.Diagnostics 라이브러리 사용하기 ... 158 CorDbg 사용하기 ... 159 복잡한 표현식을 간단하게 만들기 ... 160 결론 ... 161 Chapter 7. 업그레이드 마법사의 기능들 업그레이드 철학 ... 164 그건 당신 코드야 ... 164 동작만 하게 만들어 ... 165 호환성 라이브러리(Compatibility Library) ... 166 업그레이드 마법사의 능력과 한계 ... 166 마법사의 방법론 ... 166 프로젝트 업그레이드 ... 169 폼과 고유 컨트롤 ... 175 ActiveX 컨트롤과 ActiveX 참조 ... 185 Visual Basic 코드 ... 189 전역 객체(Global Objects) ... 196 클래스 모듈과 사용자 컨트롤 ... 196 데이터 액세스용 객체 ... 198 디자이너 ... 199 결론 ... 199 Chapter 8. 에러, 경고, 문제들 다양한 종류의 EWI ... 206 업그레이드 문제 ... 206 Upgrade ToDo ... 207 런타임 경고 ... 208 디자인 문제 ... 209 업그레이드 노트와 전역적 경고 ... 210 업그레이드 보고서 이해하기 ... 210 수정 시간 예측하기 ... 212 EWI 사용하기 ... 214 다양한 업그레이드 EWI ... 215 업그레이드 문제 ... 216 ToDo 항목 업그레이드 ... 218 UPGRADE_WARNING ... 219 디자인 에러 ... 222 전역적 경고(Global Warnings) ... 224 업그레이드 노트(Upgrade Notes) ... 225 어떤 문제가 탐지되지 않는가? ... 226 결론 ... 229 Chapter 9. Visual Basic 6과 Visual Basic .NET 사용하기 : COM Interop COM Interop이 활약하는 부분 ... 233 ActiveX 컨트롤 ... 234 .NET 클라이언트와 COM 서버 컴포넌트 간의 통신 ... 234 COM 클라이언트와 .NET 서버 컴포넌트 간의 통신 ... 234 Visual Basic 6 클라이언트/서버 애플리케이션 업그레이드하기 ... 235 COM 서버와 통신하는 .NET 클라이언트 만들기 ... 237 Visual Basic .NET 클라이언트와 Visual Basic 6 서버 간의 디버깅 ... 239 VB 6 프로젝트가 Visual Studio .NET에서 디버깅될 수 있도록 준비하기 ... 239 VB 6 클라이언트가 VB .NET 컴포넌트를 호출할 수 있도록 공개하기 ... 242 Visual Basic 6 클라이언트와 .NET 서버 간을 디버깅하기 ... 246 이제 전부 시도해보자 ... 247 COM을 .NET과 교체하기 : 이진형 호환성 ... 248 간접 교체 모델 ... 249 Visual Basic .NET 클래스에서 이진형 호환성을 가능하게 만들기 ... 250 결론 ... 256 Part 3. 프로젝트 동작하게 만들기 Chapter 10. 10가지 일반적인 업그레이드 문제들 기본 속성들 ... 260 COM 객체에서의 AddItem과 ToString ... 263 수명 결정과 가비지 컬렉션 ... 265 가능한 한 원하는 시기로 수명 결정하기 ... 268 일반(Generic) 객체들(Control/Form/Screen) ... 268 Dim...As New ... 270 Sub Main(또는 Default Form) ... 272 폰트의 차이 ... 273 부적절한 상수(Bad Constants) ... 275 드래그 앤 드롭 ... 277 Visual Basic 6에서의 드래그 앤 드롭 ... 277 Visual Basic .NET에서의 드래그 앤 드롭 ... 280 컬렉션 클래스(Collection Class) ... 284 결론 ... 288 Chapter 11. 개발 언어와 관련된 문제 해결하기 개발 언어 요소들 ... 290 If...End If 프리 컴파일문 ... 291 상수와 상수 수식 ... 291 제어문의 흐름(Control Flow) ... 295 파일 함수 ... 301 형과 형 연산 ... 309 Object가 Variant를 대체 ... 309 배열 ... 314 구조체(Structures) ... 319 코드를 스레드 안정형으로 만들기 ... 323 Windows API ... 327 형 변경 ... 327 As Any는 더 이상 지원되지 않는다 ... 328 AddressOf 변경 ... 330 사용자 정의 형을 API 함수에 전달하기 ... 335 ObjPtr과 StrPtr은 지원되지 않는다 ... 339 결론 ... 341 Chapter 12. 폼 문제 해결하기 폼 구조상의 유사점 ... 344 일반적인 문제들 ... 346 기술의 차이 ... 349 폼과 관련된 문제 ... 355 이벤트 발생의 차이점 ... 355 기본 폼 : DefInstance ... 359 애플리케이션의 수명과 폼 ... 361 MDI 폼 ... 366 결론 ... 367 Chapter 13. ActiveX 컨트롤과 컴포넌트 업그레이드하기 ActiveX 컨트롤을 사용할 수 있다 ... 370 ActiveX 업그레이드 전략 ... 371 ActiveX 컨트롤 호스팅의 제약 사항 ... 371 ActiveX .NET 컨트롤 : 최상의 선택 ... 374 ActiveX Interop Ax 랩퍼(Wrapper) : 윈도우 폼 랩퍼 ... 374 속성과 파라미터 형의 매핑 ... 376 표준 컴포넌트 랩퍼와 ActiveX 컨트롤 하위객체(Subobject) ... 379 형 변환이 필요한 일반적 예외 사항 ... 381 이름의 충돌(Name Collision) ... 383 이벤트 이름 충돌 ... 384 .NET에서 ActiveX 컴포넌트 사용하기 ... 384 ByRef에 문제가 있는 경우 ... 384 컬렉션이 컬렉션이 아닌 경우 ... 387 Nonzero-Bound 배열 ... 388 형 별칭(Alias Type)은 지원되지 않는다 ... 390 모듈 메서드는 지원되지 않는다 ... 390 결론 ... 392 Chapter 14. 데이터 액세스 문제 해결하기 Visual Basic의 데이터 액세스 ... 394 코드 ... 394 데이터 바인딩 ... 396 ADO Data Environment ... 397 업그레이드되지 않는 컴포넌트 ... 397 미래는 ADO.NET ... 398 데이터 액세스 코드에 대한 일반적인 문제들 ... 399 DAO와 RDO 모듈 메서드 ... 399 ADO 버전 2.7 ... 401 이벤트에서의 에러 ... 401 RDO 연결 ... 404 Null, vbNullString, vbNullChar ... 406 ADO Data Environment ... 407 Dispose 호출하기 ... 408 Initialize 이벤트 ... 408 Microsoft Access 데이터베이스의 커서위치 ... 408 ADO 데이터 바인딩 ... 409 ADO Data 컨트롤의 컨트롤 배열 ... 411 결론 ... 411 Chapter 15. 재디자인이 필요한 문제들 OLE Container 컨트롤 대체하기 ... 414 페인팅 함수 대체하기 ... 419 클립보드 코드 다시 작성하기 ... 423 컨트롤 컬렉션 사용하기 ... 425 폼 컬렉션 사용하기 ... 428 PrintForm 코드 업그레이드하기 ... 431 속성 페이지 대체하기 ... 433 ObjPtr, VarPtr, StrPtr 제거하기 ... 436 결론 ... 439 Chapter 16. COM+ 컴포넌트 업그레이드하기 COM+ 애플리케이션 형 ... 442 Visual Basic .NET에서 COM+ 사용하기 ... 443 Visual Basic .NET에서의 COM+ 요구사항 ... 445 ServicedComponent 클래스에서 상속받기 ... 446 특성(Attribute) 다루기 ... 447 어셈블리에 대한 강력한 이름(Strong Name) 만들기 ... 453 COM+ 애플리케이션 등록하기 ... 454 COM+ 컴포넌트 업그레이드하기 ... 457 .NET과 COM 컴포넌트가 연동되게 만들기 ... 462 결론 ... 462 Chapter 17. VB 응용 프로그램 마법사 프로젝트 업그레이드하기 App.Revision ... 468 frmAbout 폼 ... 470 frmLogin 폼 ... 471 frmMain 폼 ... 472 API Declare 명령문 ... 472 mnuHelpAbout_Click 이벤트 프로시저 ... 473 App.HelpFile ... 474 MDI 프로젝트의 ActiveMdiChild ... 475 frmMain_Closed의 폼 컬렉션 ... 478 MDI 프로젝트의 클립보드 ... 479 frmSplash 폼 ... 481 frmBrowser 폼 ... 484 데이터 폼 ... 485 Module 1 모듈 ... 485 LoadResStrings 메서드 ... 485 결론 ... 488 Part 4. 가치를 높이는 기법 Chapter 18. 애플리케이션의 가치 높이기 예제 애플리케이션에 대한 설명 ... 492 새로운 파일 함수 ... 493 디렉터리의 내용 읽기 ... 494 DLL에서 모든 폼 발견하기 ... 495 다이나믹하게 폼 로딩하기 ... 496 파일 읽고 쓰기 ... 497 다이나믹 속성 사용하기 ... 498 새로운 윈도우 기능 ... 500 레지스트리에 접속하기 ... 500 컨트롤 엥커(Control Anchoring) 설정 ... 503 그랙픽 기능 ... 503 Windows XP 스타일의 컨트롤 ... 508 XCopy 전개 ... 510 결론 ... 512 Chapter 19. ActiveX 컨트롤을 윈도우 폼 컨트롤로 바꾸기 컨트롤 업그레이드의 장점 ... 514 100% .NET 호환성 ... 514 버전 부여 기능의 강화 ... 515 더 쉬워진 전개 ... 516 컨트롤을 대체하는 과정 ... 516 컨트롤을 수작업으로 업그레이드하기 ... 517 Visual Basic 6 ActiveX 컨트롤의 매핑 ... 525 ActiveX 컨트롤 vs. 윈도우 폼 컨트롤 ... 525 결론 ... 529 Chapter 20. ADO를 ADO.NET으로 전환하기 ADO 프로그래머를 위한 ADO.NET ... 532 ADO.NET의 소개 ... 532 DataSet ... 534 ADO 코드를 Visual Basic .NET 애플리케이션과 통합하기 ... 536 ADO Recordset을 .NET 컨트롤에 연결하기 ... 536 ADO에서 XML 웹 서비스 사용하기 ... 538 ADO 객체를 ADO.NET에 매핑하기 ... 540 Connection과 Command 객체 ... 541 Recordset ... 543 DataView 사용하기 ... 546 데이터 바인딩 ... 547 윈도우 폼 컨트롤에 연결하기 ... 547 성능에 대한 설명 ... 549 결론 ... 552 Chapter 21. 분산형 애플리케이션 업그레이드하기 느슨하게 연결된 애플리케이션 vs. 밀접하게 연결된 애플리케이션 ... 555 메서드 호출(Invocation)의 부하 ... 555 컴포넌트화(Componentization)의 논리적 조직 ... 558 .NET의 분산형 기술 ... 559 XML 웹 서비스 ... 559 간단한 XML 웹 서비스 만들기 ... 560 기존의 애플리케이션에서 웹 서비스 지원하기 ... 566 리모팅(Remoting) ... 573 Simple Remoting 예제 ... 574 리모팅을 위한 아키텍처 ... 578 분산형 COM+ 애플리케이션 ... 584 COM+와 리모팅 ... 585 SOAP 서비스 사용하기 ... 585 .NET에서의 COM+ 애플리케이션 프록시 ... 587 결론 ... 588 Part 5. Appendix Appendix A. 객체 매핑 참조 Appendix B. 함수 매핑 참조 INDEX ... 662