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

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

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

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

听起来你想使用免注册COM 。

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

使用带有清单的无reg COM可以让你重新回到那个坑。

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

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