COM의 소개(파트 2) – COM 서버의 이면
본 게시물은 ‘codeproject.com’에 게시된 글 ‘Introduction to COM Part II - Behind the Scenes of a COM Server’을 번역한 것입니다.
원 게시물은 https://www.codeproject.com/Articles/901/Introduction-to-COM-Part-II-Behind-the-Scenes-of-a에 게재되어 있습니다. 최대한 원문에 적힌 의도를 반영하고자 하였으나, 우리말로 읽었을 때 보다 자연스럽게 하고자 부득이 어순과 어휘를 조정한 부분도 있음을 양해 바랍니다.
또한 본 게시물에서 언급하고 있는 예제 소스 코드는 Visual C++ 6.0을 기준으로 작성되어 있기 때문에 후속 버전의 Visual Studio(또는 Visual Studio .NET)에서 자동 생성되는 COM 코드와는 다소 차이가 있음을 감안하고 읽으시기 바랍니다.
- COM의 소개(파트 2) – COM 서버의 이면 (1)
- COM의 소개(파트 2) – COM 서버의 이면 (2)
- COM의 소개(파트 2) – COM 서버의 이면 (3)
- COM의 소개(파트 2) – COM 서버의 이면 (4)
- COM의 소개(파트 2) – COM 서버의 이면 (5)
- COM의 소개(파트 2) – COM 서버의 이면 (6)
- COM의 소개(파트 2) – COM 서버의 이면 (7)
- COM의 소개(파트 2) – COM 서버의 이면 (8)
- COM의 소개(파트 2) – COM 서버의 이면 (9) [完]
COM 서버 훑어보기
본 글에서 우리는 가장 간단한 COM 서버인 ‘인 프로세스 서버(in-process server)’ 형태의 서버에 대해 살펴보겠습니다.
‘인 프로세스(in-process)’라는 말은 클라이언트 프로그램의 프로세스 영역에 COM 서버가 적재(load)된다는 뜻입니다. ‘인 프로세스(줄여서 in-proc)’ 서버는 항상 DLL 파일 형태로 존재하고, 클라이언트 프로그램이 설치된 컴퓨터와 같은 컴퓨터에 설치되어야 합니다.
인 프로세서 서버는 COM 라이브러리가 사용하기 전에 다음의 두 조건을 만족해야 합니다.
1. HKEY_CLASSES_ROOT\CLSID
의 하위 키로 적절하게 등록되어 있어야 합니다.
2. DllGetClassObject
라는 이름의 함수를 내보내야(export)합니다.
위의 두 조건은 여러분이 인 프로세스 서버를 작동시키기 위하여 필요한 최소한의 조건입니다. HKEY_CLASSES_ROOT\CLSID
의 하위 키 이름은 COM 서버의 GUID
여야 합니다. 그리고 키는 COM 서버의 위치와 스레드 모델에 대한 값을 반드시 가지고 있어야 합니다.
DllGetClassObject
함수는 COM 라이브러리가 CoCreateInstance
API에 따라 작업을 수행할 때 호출되는 함수입니다.
COM 서버는 또한 다음의 세 가지 함수를 내보내야(export) 합니다.
DllCanUnloadNow
- COM 서버가 메모리에서 적재 해제될 수 있는지 COM 라이브러리에서 확인하고자 할 때 호출되는 함수입니다.
DllRegisterServer
regsvr32
와 같은 설치 유틸리티가 COM 서버를 등록하는 과정에서 호출되는 함수입니다.DllUnregisterServer
regsvr32
와 같은 설치 제거 유틸리티가 COM 서버를 등록 해제할 때DllRegisterServer
가 생성한 레지스트리 키를 삭제하기 위해 호출되는 함수입니다.
물론 위와 같은 함수들을 단순히 내보낸다고 해서 되는 것은 아니고, COM 기술 사항을 준수해야 COM 라이브러리와 COM 클라이언트에서 이 COM 서버를 사용할 수 있습니다.
계속 읽기
이전 게시글: COM의 소개(파트 2) – COM 서버의 이면 (1)
다음 게시글: COM의 소개(파트 2) – COM 서버의 이면 (3)