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 서버가 작동을 하기 위해서는 무엇보다도 Windows 레지스트리에 적절하게 등록되어 있어야만 합니다. 여러분이 레지스트리 편집기를 통해 HKEY_CLASSES_ROOT\CLSID
를 탐색하면 무수히 많은 하위 키들을 보게 되실 것입니다. HKCR\CLSID
는 현재 컴퓨터에서 사용 가능한 모든 COM 서버들을 리스트로서 보관하고 있습니다.
대개 DllRegisterServer
를 통해 COM 서버가 등록이 되면, 표준적인 레지스트리 포맷에 따라 COM 서버의 GUID에서 따온 새로운 키가 CLSID
하위에 추가됩니다. 레지스트리 포맷의 GUID
란 다음과 같은
{067DF822-EAB6-11CF-B56E-00A0244D5087}
처럼 중괄호와 하이픈이 포함된 것입니다. 문자는 대문자도 되고 소문자도 됩니다.
이 레지스트리 키의 기본값은 인간이 읽을 수 있는 형태로 적힌 coclass 이름입니다. 이 값은 Visual C++에서 함께 제공하고 있는 OLE/COM Object Viewer와 같이 사용자 인터페이스에 출력하기 적합한 형태여야 합니다.
GUID
이름으로 된 하위 키의 하위에는 더 많은 정보들이 보관될 수 있습니다. 여러분이 생성해야하는 이러한 레지스트리 키의 종류는 대부분 여러분이 만들고 있는 COM 서버의 종류에 달려 있습니다.
우리가 만들고 있는 간단한 ‘인 프로세스 서버’ 의 목적에 따르면 우리는 InProcServer32
라는 이름을 갖는 하나의 레지스트리만 있으면 됩니다.
InProcServer32
레지스트리 키는 두 개의 문자열을 포함하고 있습니다. 하나는 기본값으로서 COM 서버 DLL 파일의 전체 경로를 나타내고, 다른 하나는 스레드 모델을 지정하는 ThreadingModel
이라는 값입니다. 스레드 모델은 본 글의 범위를 벗어나므로 싱글 스레드 COM 서버를 만들고자 할 때 사용되는 스레드 모델은 Apartment
라고만 알아두시기 바랍니다.
계속 읽기
이전 게시글: COM의 소개(파트 2) – COM 서버의 이면 (5)
다음 게시글: COM의 소개(파트 2) – COM 서버의 이면 (7)