1

我试图弄清楚如何向 C# 应用程序(在移动设备 6 及更高版本上运行的 .net cf 3.5)添加一些 directshow 功能,但我很难弄清楚如何弥合使用非托管 c++ 类之间的差距(es) 在托管 C# 中。

我已经用 C++ 编写了我需要的功能: 基本上,我有一个管理器类,它使用 COM 来利用所需的 directshow 功能。快速免责声明:我是 COM 新手,我对 C++ 与 C# 的集成非常陌生。

我真的希望有知识的人可以建议我进一步研究的基本策略。 以下是我研究过的一些,以及我发现的问题:

  1. 创建一个 C++ DLL,然后从 C# 调用它。
    问题:由于我在智能设备平台上工作,创建托管 C++ dll 不是一种选择,因此 C# 很遗憾无法直接调用我的 c++ dll。 从 C#(通过 COM)创建我的非托管 C++“dshow manager”类的实例是最佳选择吗?

  2. 创建一个 C++ DLL,然后只需 Pinvoke/DLLImport 所需的方法。
    问题:我的解决方案有一个事件监听器和东西,所以我需要维护一个管理器类的实例(参见选项 3),而不仅仅是调用单个方法。

  3. 在 C# 中复制 C++ 类,然后从 C# 通过 COM 调用 dshow 方法。 问题:这对我来说似乎是最好的选择,但从我在这里找到的MSDN中,我需要首先“创建 com 接口和类型的托管定义”,不幸的是我找不到要导入的 directshow TLB 文件TLBImp.exe。WM6 SDK 给我的所有内容都是 dshow LIB、PDB 和 EXP。正如一些网站所建议的那样,我什至找不到 IDL 文件来创建 TLB。

就目前而言,我仍在调查事情,但现在有点卡住了。有什么建议么?提前致谢!

4

1 回答 1

2

您可能可以将桌面 DShow.NET 库作为移植指南。Alex Mogurenko最近关于在 WinMo 上使用 DShow 播放音频和视频的博客也是一个很好的资源。

编辑:我想我没有直接回答关于策略的问题。是的,#3 是要走的路。包装 DShow 并调用它,不要添加另一层令人困惑的间接(COM 已经足够令人困惑了)。

于 2009-06-23T14:22:16.307 回答