COM 프로그래밍 질문입니다.
안녕하세요
COM 프로그래밍에 관한 질문입니다.
INPROC 모델입니다.
CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, LPVOID pvReserved,REFIID riid, LPVOID FAR* ppv);
STDAPI DllGetClassObject(REFCLSID rClsId,REFIID rIID,PPVOID ppvInterface)
여기서 CoGetClassObejct() 의 rclsid 값이 DllGetClassObject()의 rClsId 로 전달되는 목적이 명확히 이해가 가지않습니다.
CoGetClassObject 는 DllServer 을 찾기위해 레지스트리를 이용하는데 그때 rclsid 값을 이용하는것으로 알고있습니다.
그런데 이 rclsid 값이 DllServer 를 찾는 과정에서 사용이 끝나지않고 , DllServer를 찾은후 DllGetClassObject() 내부에서
어떤 목적을 위해 또 사용된다는것이 논리적으로 명확히 와 닿지를 않습니다.
전 다음과 같이 되어야 명확하게 성립된다고 생각합니다.
DllServer 가 자체적으로 갖는 GUID 값이 있어야한다고 생각합니다.(레지스트리등록용)
그리고 DllGetClassObject() 에서는 CoGetClassObject()에서 사용한 rclsid 값을 번복해서 이용하는 일이 없어야한다고생각합니다.
하지만 제가 보는 책에
DllGetClassObject(..)
{
//시작부분
if(rClsId != CLSID_AAAAAAA){ return E_FAIL }
}
위와 같은 루틴이있어서 질문드려봅니다.
책에나와있는것에서는 저 CLSID_AAAAAAA를 DLL_SERVER 를 레지스트리에 등록하는 목적으로도 사용하고(등록용 레지스트리파일따로있음)
DllGetClassObject(..)에서도 비교용으로 사용을하는데 이미 DllGetClassObject 를 호출할수있다는건 CoGetClassObejct의 rclsid 값이
레지스트리에 등록된 DLLSERVER 값이랑 같았다는것이고 그래서 DllGetClassObject가 호출된것인데 여기서 한번더 확인하는이유를
이해할수없습니다.
조언부탁드립니다.
댓글 달기