我有一个本机C ++库,它使用大型静态缓冲区(它从设备获取数据)。
假设这个缓冲区定义如下:
unsigned char LargeBuffer[1000000];
现在我想将此缓冲区的一部分暴露给托管C ++,例如:当库在LargeBuffer[5000]
存储1000字节的新数据时,我想对托管C ++代码执行回调,将指针传递给LargeBuffer[5000]
,以便托管C ++可以访问那里的1000字节数据(直接如果可能,即没有复制数据,以达到最佳性能)。
让托管C ++代码访问此本机数组中的数据的最佳方法是什么?
答案 0 :(得分:4)
托管C ++可以很好地访问非托管内存。您只需传入指针并在托管c ++中使用它。
现在,如果您希望将该数据传递到其他.NET语言,则需要将该数据复制到托管内存结构或使用C#中的不安全代码
答案 1 :(得分:1)
从.net 2.0和新的IJW开始,您应该能够直接从CLI C ++访问缓冲区。
只要你没有指定“#pragma unmanaged”,那么代码将被编译为托管形式,允许直接访问。