将字节数组从c++传递到c#程序集的不同方法是什么

What are the different ways to pass a byte array from c++ to a c# assembly?

本文关键字:程序集 是什么 方法 字节数 字节 数组 c++      更新时间:2023-10-16

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

假设您使用类似Reverse p/Invoke的方法从非托管C++调用C#方法,则可以直接传递指针。C#代码应该将指针接受为IntPtrUIntPtr,然后可以将其视为非托管数组。

一旦将指针传递给C#代码,就有很多方法可以访问指针后面的数据。您可以使用不安全代码和指针,如果您在单独的字节上聚会,这可能是最高的性能。

如果您想将其视为字节流,可以使用UnmanagedMemoryStream。

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

除了C++和C#代码之间的指针本身之外,以上所有内容都不需要任何数据复制。

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

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