
| 移动参考模型 1.5:托管 .NET* 环境中的数字媒体处理  | 在 .NET 中使用 DirectShow 由于"移动参考模型"视频处理第 II 阶段的一个主要目标是,将视频处理迁移到 C# 托管世界中,这是参考 DirectShow API 所必须使用的开发策略。从表面上看,.NET 中与 COM 对象的互操作性是很直接的。微软为 COM 互操作性提供一个便利且高效的策略。通过提供导入包装程序,即用于 COM 组件的所谓运行时可调用包装程序(RCW),搭建了新旧世界之间的桥梁。微软提供了"tlbimp.exe"工具,它能读取与 COM 组件相关的类型库信息并自动生成 RCW。实际上,在设置 COM 组件参考时,Visual Studio .NET IDE 会自动提供该服务。
这样,与 DirectShow 进行通信就像针对各种 COM 组件设置项目参考一样简单。例如,DirectShow 的 FilterGraphManager 是通过 DLL"quartz.dll"实现的。 该 DLL 包含其 TypeLib 信息。因而,为 quartz.dll 自动生成的 RCW 中包含关于 FilterGraphManager 的信息。
遗憾的是,用于 .NET 的 COM 互操作性策略完全依赖于每个已包装组件的 TypeLib 信息。许多旧式 COM 组件,尤其是仅用于 C++ 的组件,从不提供外部类型库。而是依靠 C 或 C++ 样式头文件(#include 文件)来向客户端传达组件方法、属性和事件签名以及类型声明。
这种旧式 COM 实现的一个相关示例就是"qcap.dll",它实现 DirectShow 组件"CaptureGraphBuilder"和"CaptureGraphBuilder2"。qcap.dll 中不包含任何 TypeLib 信息,也不通过单独的类型库(.tlb)文件提供任何 TypeLib 信息。qcap.dll 所包含组件的唯一接口信息是随 DirectX SDK 一同提供的 DirectShow include 文件。如何直接在 .NET 中使用 CaptureGraphBuilder 组件?
|
|