기존의 네이티브 C++ ATL in-proc COM 서버를 별도의 프로세스로 강제 실행하려고합니다. DCOM이 COM 서버를 변경하지 않고도이 작업을 수행 할 수 있기를 바랍니다.DLL을 별도의 프로세스로로드하려면 DCOM을 정확히 어떻게 설정해야합니까?
저는 일반적인 레지스트리 설정으로 시작했습니다. HKCR \ CLSID {classId} 항목과 .dll 파일 경로를 지정하는 InProcServer32 키가 있습니다.
응용 프로그램 ID (GUID)를 생성하여 여기 저기에 추가했습니다. 특히 HKCR \ CLSID {classId} 아래에 응용 프로그램 ID와 동일한 문자열 값 "AppId"를 추가했습니다. HKCR \ AppId {applicationId} 키와 문자열 값 "DllSurrogate"를 빈 문자열과 동일하게 추가했습니다. 내 COM 서버를 기본 시스템 제공 대리자로 강제하는 것만으로도 충분하다고 생각했습니다.
DCOM 응용 프로그램이 DCOM 구성 콘솔에 나타납니다. 그러나 CoCreateInstance()
또는 CoGetClassObject()
을 호출하고 클래스 ID와 CLSCTX_LOCAL_SERVER
을 제공하면 "클래스가 등록되지 않았습니다."가 반환됩니다. 내가 도대체 뭘 잘못하고있는 겁니까?
UPD : 해결되었습니다. 어떤 단계에서 InProcServer32 키 아래에서 동일한 경로를 사용하는 잘못된 클래스 ID에 대한 레지스트리를 편집한다는 점을 제외하고는 조치를 취하기에 충분했습니다. 아마도 COM 지옥 문제 였을 것입니다.
프로세스 모니터를 실행하고 CoCreateInstance의 레지스트리 요청을 따르십시오. x64 OS에서 실행중인 경우 일부 x64-x86 문제 일 수 있습니다. –