在没有regsvr32的情况下从文件创建COM对象

时间:2010-12-27 22:05:15

标签: c# com directshow

是否可以仅使用dll而不使用regsvr32创建COM对象的实例?

我的主要目标是创建一个directshow过滤器的实例并将其插入到我的图形中 - 但我不想让regsvr32注册过滤器。过滤器将在一个dll / ax中,将与我的应用程序一起分发,并将出现在我的路径中。我也会知道CLSID。

所以我基本上只需要一个方法来创建一个类型的实例,同时只有dll / ax和CLSID。这在C#中是否可行?

3 个答案:

答案 0 :(得分:7)

听起来您想使用registration-free COM

答案 1 :(得分:3)

有可能,LoadLibrary()和GetProcAddress获取DllGetClassObject()入口点。您绕过了一堆旨在让您陷入成功陷阱的COM管道代码。特别是那些照顾ThreadingModel的东西。或者你可以用来制作32位代码的技巧在64位进程中运行,对于视频来说往往很重要。

使用带有清单的免注册COM可以让你回到那个坑里。

答案 2 :(得分:1)

当您创建COM实例时,Windows会在注册表中查找,找出要加载的dll,如何加载它,然后加载dll并找到您要查找的类。如果你想跳过这个查找算法,那么你必须实现它,我不认为这很容易。但肯定可行。

更新:寻找CoLoadLibrary功能,也许它毕竟不是那么难。我认为COM服务器在加载时调用CoRegisterClassObject,这就是Windows找到它们的方式,你可以调用CoGetClassObject。不过,我仍然处于黑暗中,所以请继续阅读MSDN。