Создание COM-объекта из файла без regsvr32

можно ли создать экземпляр COM-объекта только с dll и без regsvr32?

моя главная цель здесь-создать экземпляр фильтра directshow и вставить его в мой график-но я не хочу, чтобы мы regsvr32 регистрировали фильтр. Фильтр будет находиться в dll / ax, который будет распространяться с моим приложением и будет присутствовать в моем пути. Я также буду знать CLSID.

поэтому в основном все, что мне нужно, это способ создания экземпляра типа в то время как просто имея dll / ax и CLSID. Возможно ли это в C#?

3 ответов


звучит так, как будто вы хотите использовать Регистрация - бесплатный COM.


возможно, LoadLibrary () и GetProcAddress для получения точки входа DllGetClassObject (). Вы обходите кучу кода сантехники COM, который был разработан, чтобы заставить вас упасть в яму успеха. Особенно то, что заботится о ThreadingModel. Или трюки, которые вы можете использовать для запуска 32-битного кода в 64-битном процессе, имеют важное значение для видео.

использование reg-free COM с манифестом может заставить вас упасть обратно в эту яму.


когда вы создаете экземпляр COM, Windows ищет в реестре, выясняет, какую dll загрузить, как ее загрузить, а затем загружает dll и находит класс, который вы искали. Если вы хотите пропустить этот алгоритм поиска, то вы должны его реализовать, и я не думаю, что это легко. Но, безусловно, выполнимо.

UPDATE: ищите функцию CoLoadLibrary, возможно, это не так сложно в конце концов. Я думаю, что com-серверы вызывают CoRegisterClassObject при загрузке, вот как Windows найдите их, и вы можете вызвать CoGetClassObject. Я все еще в темноте, поэтому продолжайте читать MSDN.