C#与C ++库交谈 - AAF SDK

时间:2014-07-02 07:34:13

标签: c# c++ pinvoke

我正在尝试在c#中阅读AAF文件(描述已编辑的视频和音频序列)。 AAF是开源的,有一个C ++ SDK可用http://sourceforge.net/projects/aaf/

我是C#编码器,虽然我理解了一些C ++编码范例,但我的C ++基本上不存在。

我认为使用之前用过的pinvoke与Win32交互可以实现interaction。使用win32我从pinvoke.net中提取了调用信息,但我不完全确定如何使用第三方SDK从头开始定义pinvoke入口点。

任何人都可以帮助我开始这个吗?例如,第三方C ++库的第一步是什么?是否有帮助自动化此过程的工具?

1 个答案:

答案 0 :(得分:1)

你基本上有两种方法:

使用C ++ Interop(隐式PInvoke)

Visual C++ can interop with native C++ code。因此,您可以使用Visual C ++作为本机C ++和C#之间的桥梁。基本上你必须在visual C ++中编写包装器(或“代理”)类来与你的本机C ++对象进行交互。 在引擎盖下,此方法使用PInvoke(因此“隐式PInvoke”)具有特定选项,但它具有保留本机C ++的面向对象结构的优点。 请注意,此方法无法移植到Mono。

使用好的'PInvoke

You can use PInvoke with C++与使用PInvoke与C完全相同。 但是有一个限制:你不能用这种方式PInvoke C ++方法,所以你失去了C ++面向对象的结构。 如果您使用的库提供了C API,则可以使用它。否则,您必须创建一个小型C ++包装器,它将以C风格的自由函数的形式包装C ++ API。 如果你有很多类以这种方式包装,你可以使用SWIG自动换行。作为奖励,SWIG通过一些guru代码生成在C#中重新创建面向对象的结构。但是,使用SWIG需要一些设置,如果您只需要一些功能,我认为没有必要。