这是一个很长的镜头,但如果我能做到这一点,它将节省我的时间和麻烦。我有一个DirectShow视频过滤器,它是一个典型的外部DLL(AX文件),可以将视频提供给Skype。我已经知道如何私下使用过滤器。但是,我不知道是否可以创建一个私有过滤器,一个嵌入在EXE中并且不是外部DLL的过滤器,可由外部程序发现。据我所知,DirectShow过滤器可见的主要方式是通过在注册表中将它们注册为ActiveX / COM控件并使用私有过滤器,我认为无法完成,因为没有外部DLL用于要加载的外部程序。
那么,是否有一种巧妙的方法来熟练使用DirectShow发现系统,以便只知道如何通过枚举通过其“友好名称”访问DirectShow过滤器的外部程序可以使用它?如果不是,我会继续在我的主应用程序和我的视频过滤器的外部版本之间来回发送数据,但我真的不想这样做。
答案 0 :(得分:2)
如果外部应用程序要使用您的过滤器,则需要通过使用fitler加载DLL并从那里创建实例来实例化它。如果你把你的过滤器放到.EXE中,你仍然可以在fitler列表中注册它,但它不会有效:外部应用程序只是无法创建过滤器的优雅。
因此,如果您希望外部应用程序使用您的过滤器,则需要将其放入DLL中。请注意,如果您将过滤器放入DLL,则不必将其注册到DirectShow:您可能希望不注册它并私下实例化,在这种情况下,它可以在您的应用程序和同一时间你留下一个选项,以便在一段时间后完全注册它,并将其提供给外部应用程序。
如果您希望过滤器在外部程序中运行并以某种方式与您的应用程序通信,那么也可以这样做,但您要对将要发生的所有进程间通信负全部责任(也就是说,您需要实现它)。