Пользовательская фабрика класса COM для управляемого внутрипроцессного сервера
Я смотрю на реализацию пользовательской логики активации COM для управляемой библиотеки классов, в MkParseDisplayName/BindToObject
манера
Таким образом, создание объекта из VB может выглядеть так:
obj = GetObject("clsid:12341234-1234-1234-1234-123412341234:!UniqueObjectId")
Это не будет проблемой для сервера вне процесса (используя CoRegisterClassObject
). Тем не менее, для внутрипроцессного сервера, мне нужно изменить реализацию DllGetClassObject
, который обычно предоставляется mscoree.dll
, Это вообще возможно?
Единственный другой вариант, который я вижу, - это создать синглтон-объект C#, который будет служить фабрикой классов, и реализовать на нем IParseDisplayName. Теоретически, такой синглтон может также зарегистрировать IClassFactory
объект класса с CoRegisterClassObject(CLSCTX_INPROC_SERVER)
, но сам синглтон должен был бы сначала получить экземпляр в любом случае.