나는 this question을 알고 있지만 거기에 나와있는 단계를 따라 왔고 여전히 난처한 상태입니다. 다음과 같이 등록COM이 내 DllSurrogate 항목을 무시하는 이유는 무엇입니까?
HKCR
{
NoRemove CLSID
{
ForceRemove {5CB1D770-BF72-4F3D-B4DA-85E0542126F4} = s 'ExamplePlugin Class'
{
val AppID = s '%APPID%'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Free'
}
}
}
}
내가 AppID가있어 :
HKCR
{
NoRemove AppID
{
'%APPID%' = s 'ExamplePlugin'
{
val DllSurrogate = s ''
}
'ExamplePlugin.DLL'
{
val AppID = s '%APPID%'
}
}
}
난 다음과 같이 등록 제가 클래스를 가지고
는, (이것은 RGS 파일입니다) CLSCTX_ALL
을 CComPtr<IPlugin>::CoCreateInstance
으로 전달하십시오.
은 즉, 지금까지 내가 말할 수있는, 내가 the checklist 따랐습니다 :
- 내 CLSID 아래에 지정된 AppID가 값을 가지고있다. 나는 해당 AppID 키가 있습니다.
- 활성화 요청에
CLSCTX_LOCAL_SERVER
을 포함 시켰습니다. 내 CLSID 키에 LocalServer 키가 없습니다. - 내 CLSID 키에 InprocServer32 키가 있습니다.
- 체크리스트에 "InprocServer32에 지정된 프록시/스텁 DLL이 있음"이라고 표시되면 "구현 DLL"을 의미합니다. 그것은 존재합니다. 내 프록시/스텁 DLL이 다른 위치에 올바르게 등록되었습니다.
- 내 AppID 키 아래에 DllSurrogate 값이 있습니다.
OLE/COM 개체 뷰어에서 내 클래스를 보면 구현 탭에 "대리 프로세스 사용"이 선택되어 있습니다.
여전히 작동하지 않습니다. 내 DLL이 내 호스트 EXE와 동일한 프로세스로로드되고 있습니다.
실마리 : 프로세스 모니터를 실행하면 CLSID\{...}\AppID
값을 찾을 수 없습니다. CoCreateInstance에 CLSCTX_LOCAL_SERVER
을 전달하면 "class not registered"가 반환됩니다.
저는 Windows 2008 x64에 있지만 x86과 x64 용으로 컴파일 된 코드를 동일한 결과로 시도했습니다.
무엇이 누락 되었습니까?
응용 프로그램이 DCOM 콘솔에 표시됩니까? – sharptooth
또한 .rgs 파일을 롤인 할 때마다 대체 문자열로 매번 올바른 AppId를 전달한다는 사실을 절대적으로 확신 할 수 있습니까?그 후에 레지스트리에서 올바르게 보입니까? – sharptooth
업데이트 : 명시 적으로 CLSCTX_LOCAL_SERVER를 전달하면 대리 호스트 인스턴스가 생깁니다. 왜 내가 이전에 작동시키지 못했는지 모르겠습니다. –