将字节数组从c++传递到c#程序集的不同方法是什么
What are the different ways to pass a byte array from c++ to a c# assembly?
我想知道可以用来将字节数组从c++传递到c#的不同方法及其性能特征。理想情况下,我希望将指向非托管堆中字节数组的指针传递给C#程序集,并避免任何复制操作。
假设您使用类似Reverse p/Invoke的方法从非托管C++调用C#方法,则可以直接传递指针。C#代码应该将指针接受为IntPtr
或UIntPtr
,然后可以将其视为非托管数组。
一旦将指针传递给C#代码,就有很多方法可以访问指针后面的数据。您可以使用不安全代码和指针,如果您在单独的字节上聚会,这可能是最高的性能。
如果您想将其视为字节流,可以使用UnmanagedMemoryStream。
或者,您可以使用Marshal.Copy
和Marshal.Read
(许多变体)方法读取缓冲区内不同区域的不同数据类型。
除了C++和C#代码之间的指针本身之外,以上所有内容都不需要任何数据复制。
毫无疑问,还有其他方法可以从C#访问内存,我上面没有列出。它的要点是,以任何一种方式传递字节数组都是非常无痛的。
我认为你可以在C++端有指针,在C#端有ref。请参阅评论中提供的链接。
相关文章:
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 比特集告诉我的名字是什么?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 没有信号处理程序的POSIX定时器的目的是什么?
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 多维数据集ai中的ai_float是什么
- 是什么原因导致我的SDL2程序中出现杂散像素
- 我的C++程序的工作目录是什么
- 是什么将程序集转换为实际可执行的材料
- 窄集(_cast)的作用是什么
- 以下程序在 c++ 中的输出是什么?
- cpp中rand()方法的bankend程序是什么?
- 混合模式程序集是针对版本 'v2.0.50727' 构建的 ...本机C++/Visual C++/C# 项目错误
- 将字节数组从c++传递到c#程序集的不同方法是什么
- GCC 编译 C/C++ 最强化的选项集是什么?
- 以下内联程序集有什么问题
- 从托管程序集(C#)上的非托管进程(本机C++)调用LoadLibrary()时,预期的行为是什么
- 在C ++ R3.0.2驱动程序中使用连接池连接到MongoDB副本集的正确方法是什么?