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 라이브러리에서 확인하고자 할 때 호출되는 함수입니다.
DllRegisterServerregsvr32와 같은 설치 유틸리티가 COM 서버를 등록하는 과정에서 호출되는 함수입니다.DllUnregisterServerregsvr32와 같은 설치 제거 유틸리티가 COM 서버를 등록 해제할 때DllRegisterServer가 생성한 레지스트리 키를 삭제하기 위해 호출되는 함수입니다.
물론 위와 같은 함수들을 단순히 내보낸다고 해서 되는 것은 아니고, COM 기술 사항을 준수해야 COM 라이브러리와 COM 클라이언트에서 이 COM 서버를 사용할 수 있습니다.
계속 읽기
이전 게시글: COM의 소개(파트 2) – COM 서버의 이면 (1)
다음 게시글: COM의 소개(파트 2) – COM 서버의 이면 (3)