1

我想知道可用于将字节数组从 c++ 传递到 c# 的不同方法及其性能特征。理想情况下,我希望将指向非托管堆中的字节数组的指针传递给 C# 程序集,并避免任何复制操作。

4

2 回答 2

1

假设您使用Reverse P/Invoke之类的方法从非托管 C++ 调用 C# 方法,您只需传递指针即可。C# 代码应接受指针为IntPtror UIntPtr,然后它可以将其视为非托管数组。

将指针传递给 C# 代码后,有多种方法可以访问该指针后面的数据。您可以使用Unsafe Code 和 Pointers,如果您在单个字节上聚会,这可能是最高的性能。

如果要将其视为字节流,可以使用UnmanagedMemoryStream

或者,您可以使用Marshal.Copyand Marshal.Read(许多变体)方法在该缓冲区内的不同区域读取不同的数据类型。

以上都不需要在 C++ 和 C# 代码之间复制指针本身以外的任何数据。

毫无疑问,还有其他我没有在上面列出的从 C# 访问内存的方法。它的要点是,以任何一种方式传递一个字节数组都是非常轻松的。

于 2012-11-28T02:48:22.637 回答
0

我认为您可以在 C++ 端使用指针,在 C# 端使用 ref。请参阅评论中提供的链接。

于 2012-11-28T02:46:41.633 回答