在.NET 4.0上,将directshow自定义过滤器转换为IBaseFilter失败

时间:2016-05-06 13:18:50

标签: c# directshow directshow.net

我是Directshow.NET的初学者。为了开发一个记录桌面屏幕的应用程序,我从this link下载了一个项目。

虚拟相机通过regasm注册并使用代码行在graphstudio,C#代码中工作:

  Type type = Type.GetTypeFromCLSID(new Guid("F90CF082-213F-4F17-8B19-68267C72052F"));
  IBaseFilter screenRecorderFilter = (IBaseFilter)Activator.CreateInstance(type); 

这些项目是在.NET framework 2.0上开发的,因此将框架版本更改为4.0(客户端配置文件)。项目构建成功,汇编已使用regasm注册并在graphstudio中选中过滤器,发现工作正常。如果我执行C#项目,我们已经使用了这个过滤器,它将异常作为

  

无法投射类型的对象   ' DesktopVirtualCamFilters.VirtualCamFilter'输入   ' DirectShowLib.IBaseFilter'

看起来在IBaseFilter screenRecorderFilter = (IBaseFilter)Activator.CreateInstance(type);行投射失败。

如果选择框架版本4.0,为什么转换失败,即使过滤器在graphstudio中成功运行也是如此。使用4.0

需要进行哪些更改

对于代码参考,我已在this link

上传了项目

班级声明:

    [ComVisible(true)]
    [Guid("F90CF082-213F-4F17-8B19-68267C72052F")]
    [AMovieSetup(Merit.Normal,AMovieSetup.CLSID_VideoInputDeviceCategory)]
    public class VirtualCamFilter : BaseSourceFilter, IAMFilterMiscFlags
    {

    }

0 个答案:

没有答案