【发布时间】:2011-09-22 23:05:52
【问题描述】:
我想创建一个 DirectX“过滤器”,用于获取单个音频通道。我看过 Platform SDK 示例项目,但缺点是需要 ATL 库。
有没有一种方法可以创建 DirectX 过滤器不借助 ATL 或 MFC?即,以某种方式仅使用 gcc(例如 MinGW)和其他实际免费的工具?
【问题讨论】:
我想创建一个 DirectX“过滤器”,用于获取单个音频通道。我看过 Platform SDK 示例项目,但缺点是需要 ATL 库。
有没有一种方法可以创建 DirectX 过滤器不借助 ATL 或 MFC?即,以某种方式仅使用 gcc(例如 MinGW)和其他实际免费的工具?
【问题讨论】:
如果我理解正确,过滤器必须是 COM 组件。如果需要,您可以从大多数编译器中编写那些。
然而,所涉及的样板文件将是难以置信,我有一个 18kloc 代码库,当变成 COM 组件时变成了 25kloc(最终把它转回来只是因为样板文件 COM 多于实际小插件的代码)。
据我所知,编写 COM 组件并不需要或总是涉及 MFC。
ATL 通过提供模板和函数在编译时处理大量细节,大大简化了这一过程。您也许可以从 GCC 使用它,但我不确定会发生什么;我怀疑它是否能正常工作,尽管它可能会起作用。
没有 ATL,您需要 MIDL 并从那里生成代码。使用免费工具可以做到这一点,它在 Wine 项目的几个地方完成;你可以在那里查看代码和工具链。
无论你在哪里做,如果你坚持使用“实际上免费”的工具(因为它们不是专门为与 COM 一起工作而设计的),这将是一种痛苦,而且是一种严重的痛苦。
【讨论】:
如果您有 DirectShow 过滤器,最好的起点是PushSource Windows SDK Sample,它会生成视频并使其生成音频。
还要注意 DirectShow 基类是最早的 COM 基类之一,它们不使用 ATL/MFC。基类本身也包含在 Windows SDK 中。
【讨论】: