컴퓨터 공부/COM&ActiveX

[6월 10일 3교시] Out-Of-Process Server에서 COM object instance생성

려리군 2009. 6. 10. 12:28

서버와 클라이언트의 프로세스 영역이 다름.

클라이언트는 서버의 위치와 무관하게 서비스 받을 수 있어야 한다.


로컬서버

치명적인 오류로부터 클라이언트를 보호


marshalling architecture

LPC, RPC를 사용하여 프로세스 간 통신(IPC)구현

데이터 송수신 문제를 해결

※ marshalling DLL이 필요하다.


Proxy

클라이언트와 동일한 주소 공간에 위치

매개변수를 하나로 묶어 전송에 편리한 데이터 구조로 만들어 서버가 위치한 프로세스로 보낸다.


Stub



MIDL 컴파일러가 Proxy/Stub을 위한 파일 생성.

 - 기본적으로 64bit OS 지원

 - 32비트에서 제작시.


IDL Attribute

ref

unique

ptr

size_is

max_is

length_is

first_is

last-is

String

Range


GetInterface


Out-of Process Server는 export함수가 없기 때문에 ROT(Running Object Table)를 통해 COM 객체 저장소를 관리하고 처리한다.

Embedding 매개변수를 이용하여 구분.


CoRegisterClassObject(등록될 클래스 ID, 클래스 팩토리 IUnknown 포인터, ClsContext(서버형태), 플래그, 리턴);

플래그

REGCLS_SINGLEUSE : 하나의 component가 하나의 인스턴스만 서비스할 수 있다.

REGCLS_MULTI_SEPARATE


CoRevokeClassObject(리턴);