Создать COM-объект из файла без regsvr32 - PullRequest
6 голосов
/ 28 декабря 2010

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

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

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

Ответы [ 3 ]

7 голосов
/ 28 декабря 2010

Похоже, вы хотите использовать COM без регистрации .

3 голосов
/ 28 декабря 2010

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

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

1 голос
/ 28 декабря 2010

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

ОБНОВЛЕНИЕ: ищите функцию CoLoadLibrary, возможно, это не так сложно в конце концов.Я думаю, что COM-серверы вызывают CoRegisterClassObject при загрузке, вот как Windows находит их, и вы можете вызвать CoGetClassObject.Я все еще в неведении, поэтому продолжайте читать MSDN.

...