我这样做对吗?
我得到一个指向本机数组的指针,需要复制到托管数组。将 memcpy() 与 pin_ptr 一起使用。
unsigned char* pArray;
unsigned int arrayCount;
// get pArray & arrayCount (from a COM method)
ManagedClass->ByteArray = gcnew array<Byte,1>(arrayCount)
pin_ptr<System::Byte> pinPtrArray = &ManagedClass->ByteArray[0];
memcpy_s(pinPtrArray, arrayCount, pArray, arrayCount);
arrayCount 是 pArray 的实际长度,因此不必担心这方面。查看代码,数组是从向量复制的。所以我可以安全地设置托管数组的大小。
这有效,但不安全。当你得到时,你会把垃圾收集堆炸成碎片数组计数错误的。很难诊断。
Marshal::Copy() 既安全又快速。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)