访问本机C++;来自托管C++; 我有一个本地C++库,它使用一个大的静态缓冲区(它从一个设备中获取数据)。

访问本机C++;来自托管C++; 我有一个本地C++库,它使用一个大的静态缓冲区(它从一个设备中获取数据)。,c++,native,managed,C++,Native,Managed,假设该缓冲区的定义如下: unsigned char LargeBuffer[1000000]; 现在我想把这个缓冲区的部分暴露给托管C++,例如当在 LiggPuff[[ 5000 ] ] /Cord>库中存储1000字节的新数据时,我想执行一个回管理到C++的代码,把指针传递给大缓存(5000)< /C> >,这样托管C++就可以访问那里的1000字节数据。(如果可能,直接进行,即不复制数据,以实现最大性能) 什么是让托管C++代码访问这个本地数组的最好方法?

假设该缓冲区的定义如下:

unsigned char LargeBuffer[1000000];

现在我想把这个缓冲区的部分暴露给托管C++,例如当在<代码> LiggPuff[[ 5000 ] ] /Cord>库中存储1000字节的新数据时,我想执行一个回管理到C++的代码,把指针传递给<代码>大缓存(5000)< /C> >,这样托管C++就可以访问那里的1000字节数据。(如果可能,直接进行,即不复制数据,以实现最大性能)


什么是让托管C++代码访问这个本地数组的最好方法?

现在,如果您想将该数据传递到其他.NET语言,则需要将该数据复制到托管内存结构或使用C++中的不安全代码,如.NET 2中的不安全代码,以及新的IJW,您可以直接从CLI C++访问缓冲区。


只要不指定“#pragma unmanaged”然后,代码将被编译为一种管理方式,这是允许直接访问的。

实际上我必须将托管C++的数据传递给C语言,所以我想我必须使用不安全的代码。CLI C++和C语言混合得很好,不需要不安全的关键字。@ Hy6:如果他想从C*中访问原始指针,那就是SPELL。D“母语”不是“非托管”,不是同义词吗?在这个上下文中,“非托管”对本地程序员来说略显浮夸,我不想“自大”,所以我把“非托管”改为“原生”:-从C++中确定,但是如果我想从C语言访问原始指针,我将不得不使用不安全关键字。谢谢你给我指点IJW:我对托管-非托管机制知之甚少,现在我了解得更多了。