목차
시작하기 전에 = 15
1 마이크로소프트의 객체 기반 기술의 어제와 오늘
어느 곳이나 축약어는 있다 : COM, DCOM, OLE, 그리고 ActiveX = 25
컴포넌트 기술의 변천 = 26
커스텀 컨트롤 = 27
비주얼 베이직 익스텐션(VBX) = 27
OLE 1.0 = 28
OLE 2.0 = 28
OLE를 이해하자 = 30
엔드 유저의 눈으로 본 OLE = 30
프로그래머의 눈으로 본 OLE = 38
ActiveX 훑어보기 = 54
OLE 기술이 ActiveX를 통해 확장된다 = 55
새로운 ActiveX 기술들 = 57
분산 COM(DC0M) = 59
요약 = 60
2 객체 혁명
객체와 클래스 = 62
객체 지향의 진정한 의미 = 64
캡슐화(Encapsulation) = 64
상속 = 67
다형성 = 71
추상 기본 클래스 = 73
클래스 객체 = 74
C++의 관점에서 본 객체 = 75
C++에서의 캡슐화 = 76
C++에서의 상속 = 78
C++에서의 메소드 오버라이딩 = 80
C++에서의 다형성 = 81
C++에서의 추상 기본 클래스 = 83
C++에서의 클래스 객체 = 85
COM의 관점에서 본 객체 = 89
COM에서의 캡슐화 = 90
COM에서의 상속 = 92
COM에서의 메소드 오버라이딩 = 96
COM에서의 다형성 = 97
COM에서의 클래스 객체 = 98
요약 = 99
3 COM 객체와 인터페이스의 구축
천리 COM도 밑바닥부터 = 102
클라이언트와 서버 = 103
인프로세스 서버 = 105
로컬 서버 = 106
리모트 서버 = 107
프락시 = 108
서버는 아직 끝나지 않았다 = 110
클래스는 GUID로 식별한다 = 115
GUID의 생성 = 116
GUID를 소스 코드에 넣어보자 = 119
HRESULT 반환 타입 = 122
인터페이스를 해부한다 = 125
IUnknown 대탐험 = 129
QueryInterface()는 여러 가지 얼굴(face)을 가지고 있다 = 130
참조 카운팅 : AddRef()와 Release() = 132
IUnknown은 그 객체를 대표한다 = 136
요약 = 138
4 COM 클라이언트와 서버의 직접 구현
세상에서 가장 간단한 예제 프로그램 : Fortune1을 소개한다 = 140
Fortune2 예제 프로그램 = 143
IFortuneTeller 인터페이스를 만들자 = 143
IFortuneTeller 인터페이스 = 144
유니코드와 다국어 문자열 = 148
ANSI 문자열과 유니코드 문자열 사이의 변환 = 149
COM의 표준 문자열 타입 BSTR = 151
결국 CFortuneTeller는 ComFortuneTeller로 다시 태어난다 = 152
ComFortuneTeller 클래스 = 152
VerboseMsg() 함수 = 156
ComFortuneTeller는 IUnknown을 이렇게 구현했다 = 158
전역 데이터 = 159
ComFortuneTeller는 IFortuneTeller를 이렇게 구현했다 = 162
ComFortuneTellerFactory 클래스 = 163
IClassFactory 인터페이스 = 164
ComFortuneTellerFactory의 구현 = 175
인프로세스 서버 만들기를 끝내자 = 172
DllGetClassObject() = 174
DllCanUnloadNow() = 175
클라이언트를 만들자 = 176
COM 초기화 = 179
Fortuneteller 객체의 인터페이스 포인터 획득 = 179
객체의 사용 = 184
종료 = 185
서버를 등록하자 = 185
레지스트리에 대해 간단히 = 186
COM 클래스와 레지스트리 = 187
요약 = 189
5 MFC로 하는 COM 프로그래밍
MFC에 대한 간단한 소개 = 192
MFC와 OLE / ActiveX = 193
ActiveX 템플리트 라이브러리(ATL) = 193
변덕장이 컴포넌트와 다중 인터페이스 = 194
다중 인터페이스는 COM 통합이 아니다 = 195
다중 인터페이스와 다중 상속 = 195
심볼의 충돌 = 197
중첩 클래스를 사용한 다중 인터페이스 노출 = 198
Fortune3 예제 프로그램 = 198
ComFortuneTeller의 MFC 버전은 이렇다 = 199
CCmdTarget 클래스에서 IUnknown 인터페이스는 이렇게 구현되 었다 = 201
중첩 클래스의 선언 = 203
INTERFACE_MAP, OLECREATE, DYNCREATE 매크로 = 205
MFC ComFortuneTeller 클래스의 구현 = 206
IMPLEMENT_DYNCREATE와 IMPLEMENT_OLECREATE를 사용한 MFC 클래스 팩토리 구현 = 211
인터페이스 맵의 선언과 구현 = 212
MFC 서버에서 객체 인스턴스의 개수 세기 = 214
중첩 클래스의 IUnknown은 이렇게 구현되었다 = 216
IMPLEMENT_NESTED_IUNKNOWN 매크로 = 219
IFortuneTeller와 IQuotation 인터페이스 구현하기 = 220
MFC 기반의 Fortune3 서버 만들기를 끝내자 = 221
Fortune3 클라이언트 프로그램 = 230
요약 = 234
6 COM 통합을 사용한 구현 상속 흉내내기
COM 통합은 우리에게 어떤 의미인가? = 236
COM 통합 기법의 매커니즘 = 237
MFC 스타일의 COM 통합 = 240
Robot 컴포넌트를 만들자 = 241
IRobot 인터페이스 = 241
ISimpleDrawable 인터페이스 = 242
ComRobot COM 클래스 = 243
클라이언트와 서버 = 250
클라이언트의 메인 윈도우 = 252
본격적인 COM 통합의 시작 : NoisyRobot 컴포넌트 = 257
요약 = 268
7 프로세스의 벽을 넘어서 - 로컬 서버의 시작
왜, 로컬 서버인가? = 270
몽룡과 춘향, 그리고 방자와 향단이 : 마샬링 = 271
프락시와 스텁 = 272
인터페이스 기술 언어 = 274
커스텀 컴포넌트를 IDL파일로 작성하기 = 276
Import = 280
Typedef = 281
인터페이스 = 282
메소드 원형 = 282
Coclass = 286
MDL과 디벨로퍼 스튜디오를 결합시키자 = 287
COM 피자 주문 접수기 위저드 = 288
ComPizzaOrderTaker 클래스 = 290
PizzaOrderTaker1 로컬 서버 = 302
프락시 / 스텁 DLL = 313
위저드 클라이언트 = 321
요약 = 347
8 ActiveX 템플리트 라이브러리(ATL)를 사용한 COM 객체 만들기
안녕하세요! ATL 길라잡이 = 350
ATL과 C++ 템플리트 = 351
ATL과 다중 상속 = 351
자동화와 이중 인터페이스 = 352
티어 오프 인터페이스 = 353
ATL의 구조 = 353
CComModule 클래스 = 354
CComObjectRoot 클래스 = 355
CComObject 클래스 = 355
CComCoClass 클래스 = 357
커스텀 인터페이스와 혼용하기 = 358
PizzaOrderTaker의 ATL 버전 개봉 박두! = 359
ATL로 ComPizzaOrderTaker 클래스를 선언하자 = 359
ComPizzaOrderTaker클래스의 ATL 버전을 구현하자 = 366
로컬 서버를 작성하자 = 372
ATL로 인프로세스 서버 만들기 = 386
레지스트리 스크립팅과 레지스트라 = 389
레지스트리 스크립트의 시험 = 390
레지스트리 스크립트의 작성 = 390
레지스트라를 불러오자 = 395
교체 매크로 = 397
위저드 설정 엔트리의 추가 = 400
요약 = 400
9 분산 객체의 이모저모
분산 시스템의 변천사 = 402
전통적 시스템(Legacy System) = 403
클라이언트 / 서버 = 403
DCOM = 410
객체 RPC = 411
OXID = 412
DCOM에서의 인터페이스 포인터 전달 = 413
DCOM의 최적화 = 414
핑(ping)과 델타 핑(delta ping) = 416
요약 = 418
10 보안
보안 지원 제공자 인터페이스 = 420
NT 보안 훑어보기 = 420
보안 설명자 = 420
보안 ID = 421
액세스 제어 리스트 = 425
사용자 프로파일 = 428
액세스 토큰 = 430
COM 보안 = 430
인증 보안 = 431
사용자 도용 보안 = 432
활성화 보안 = 433
호출 보안 = 440
COM 보안-예제 = 441
예제1 = 449
예제2 = 449
COM 객체의 신원 = 449
프로세스별 보안 = 451
보안 담요(Security Blanket)와 사용자 도용 = 452
IClientSecurity = 452
IServerSecurity = 453
DCOM과 CAPI = 455
요약 = 455
11 COM 스레딩 모델 사용하기
스레드 관련 Win32 API = 461
CreateThread() = 461
SuspendThread()와 ResumeThread() = 462
TerminateThread() = 463
GetExitCodeThread() = 464
ExitThread() = 464
_beginthreadex() = 465
스레드 로컬 스토리지 = 468
스레드의 타입 = 470
작업 스레드 = 471
메시지 큐 스레드 = 473
스레드 풀 = 478
윈도우 스레드 = 480
어파트먼트 스레드 = 483
파이버 = 485
스레드 동기화 = 486
이벤트 = 487
뮤텍스 = 488
크리티컬 섹션 = 490
세마포어 = 492
COM 스레딩 모델 = 494
단일 스레드 = 495
어파트먼트 스레드 = 497
자유 스레드 = 502
요약 = 503
12 자동화, 베일을 벗겨라!
자동화의 이모저모 = 509
자동화 데이터 타입 = 518
자동화와 이벤트 지원 = 526
MFC의 자동화 지원 = 526
ATL에서의 자동화 지원 = 529
클라이 언트(컨트롤러) = 529
CComDispatchDriver = 529
서버 = 530
특수한 의미를 가진 디스패치 ID(dispID)들 = 531
요약 = 532
13 실전! 분산 객체
원격 객체 생성 = 534
실행중인 원격 COM 컴포넌트에 연결하기 = 535
CoCreateInstanceEx = 541
언제, 어떤 타입의 COM 서버를 사용할 것인가? = 546
분산 객체 애플리케이션 설계하기 = 548
확장성(Scalability) = 548
로드 밸런싱 = 550
서비스 객체로의 연결 = 552
이벤트 알림과 연결가능 객체 = 555
피자 주문 시스템의 분산 객체 버전을 만들자 = 556
버전업된 PizzaOrderTaker 서버 = 558
로케이터 클래스 = 573
PizzaMaker 서버 = 580
피자 공급기(PizzaMaker) 서버 스파이 = 599
요약 = 619
CD-ROM 사용법 = 621
찾아보기 = 625