2010-12-27 3 views
6

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

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

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

ответ

7

Похоже, вы хотите использовать registration-free COM.

+2

FYI: Нет, вы не можете использовать фьюжн для этого, поскольку фильтры directx нуждаются в дополнительных ключах reg для правильной регистрации в графе фильтра, чем может обеспечить слияние. – wqw

+0

@wqw Если это так, вы, вероятно, захотите добавить это как ответ, так как ни один из подходов к использованию COM-компонента без его регистрации не будет работать для этого случая. –

+0

@wqw: Вы могли бы использовать RegOverridePredefKey для этого. (http://msdn.microsoft.com/en-us/library/ms724901%28VS.85%29.aspx) –

1

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

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

3

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

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

+0

+1, мы делаем это без каких-либо серьезных проблем. Одно предостережение - не будет никакой сортировки. – sharptooth

Смежные вопросы