繁体   English   中英

C#字节数组和C ++字节数组之间的元帅

[英]Marshal between C# byte array and C++ byte array

我有一个C# array<System::Byte> ,我希望将其转换为C ++ byte* 我怎样才能做到这一点? 我正在使用C ++ / CLR,因为它允许我在同一项目中使用托管/非托管代码。 我基本上是在写一个DLL,并制作一些可以通过C#调用的方法,但其中包含非托管C ++代码。

所以基本上,我的C ++ / CLR方法标头是这样的:

void testMethod(array<Byte>^ bytesFromCSharp);

在该testMethod内部,我想将bytesFromCSharp转换为byte* ,其他非托管C ++代码可以使用。 我分配了byte*数组,并编写了for循环以逐字节复制,但是感觉应该有更好的解决方案。

编辑:汉斯的技术示例,从他的回答如下:

//C#
byte[] myBytes = {1,2,3,4};

//C++/CLI
void testMethod(array<byte>^ myBytes) {
    pin_ptr<byte> thePtr = &myBytes[0];
    byte* bPtr = thePtr;
    nativeCode(bPtr);
    ...
}

使用pin_ptr <>模板类可固定数组并生成本机代码可以使用的指针。 固定它可以确保在本机代码使用该数组时,垃圾回收器无法移动该数组。

只要确保在pin_ptr <>变量超出范围后,本机代码就不能再使用该数组。 这也意味着存储指针以供以后使用的本机代码是不正确的 如果是这样,则必须进行复制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM