Я пытаюсь заставить существующий встроенный COM-сервер C ++ ATL in-proc в отдельный процесс. Я надеюсь, что DCOM сможет сделать это для меня, не меняя COM-сервер.
Я начал с обычной настройки реестра - у меня есть запись HKCR \ CLSID {classId} и ключ InProcServer32, указывающий путь к файлу .dll.
Я сгенерировал идентификатор приложения (GUID) и добавил его здесь и там. В частности, я добавил строковое значение «AppId» в HKCR \ CLSID {classId}, равное идентификатору приложения. Я также добавил ключ HKCR \ AppId {applicationId} и строковое значение «DllSurrogate», равное пустой строке. Я подумал, что этого будет достаточно, чтобы заставить мой COM-сервер использовать системный суррогат по умолчанию.
Приложение DCOM появляется в консоли конфигурации DCOM. Однако когда я вызываю CoCreateInstance()
или CoGetClassObject()
и предоставляю идентификатор класса и CLSCTX_LOCAL_SERVER
, возвращается «Класс не зарегистрирован». Что я делаю не так?
UPD: решено. Предпринятых шагов было достаточно, чтобы заставить его работать, за исключением того, что я редактировал реестр для неправильного идентификатора класса, который по какой-то причине имел тот же путь в ключе InProcServer32 - возможно, это была проблема с адом COM.