是否可以仅使用dll而不使用regsvr32创建COM对象的实例?
我的主要目标是创建一个directshow过滤器的实例并将其插入到我的图形中 - 但我不想让regsvr32注册过滤器。过滤器将在一个dll / ax中,将与我的应用程序一起分发,并将出现在我的路径中。我也会知道CLSID。
所以我基本上只需要一个方法来创建一个类型的实例,同时只有dll / ax和CLSID。这在C#中是否可行?
答案 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。