^(코딩캣)^ = @"코딩"하는 고양이;

COM의 소개(파트 2) - COM 서버의 이면 (6)

API/COM
2020. 10. 8. 15:25

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 코드와는 다소 차이가 있음을 감안하고 읽으시기 바랍니다.

  1. COM의 소개(파트 2) – COM 서버의 이면 (1)
  2. COM의 소개(파트 2) – COM 서버의 이면 (2)
  3. COM의 소개(파트 2) – COM 서버의 이면 (3)
  4. COM의 소개(파트 2) – COM 서버의 이면 (4)
  5. COM의 소개(파트 2) – COM 서버의 이면 (5)
  6. COM의 소개(파트 2) – COM 서버의 이면 (6)
  7. COM의 소개(파트 2) – COM 서버의 이면 (7)
  8. COM의 소개(파트 2) – COM 서버의 이면 (8)
  9. 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)

 

카테고리 “API/COM”
more...