[英]Copy from const char* to a byte array C++/c# interop Marshal::Copy
[英]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.