我这样做对吗?
我得到一个指向 native 数组的指针,需要复制到托管数组。将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的实际长度,因此不必担心该方面。看一下代码,然后从 vector 复制数组。因此,我可以安全地设置托管阵列的大小。
最佳答案
您所做的几乎是正确的:
pin_ptr<Byte> pinPtrArray = &ManagedClass.ByteArray[ManagedClass.ByeArray->GetLowerBound(0)];
元帅::复制并不安全,而且速度也不快。始终在托管C++中使用固定指针。
编辑:如果需要,您可以检查长度以确保memcpy不会首先超出范围,例如:
if (arrayCount > ManagedClass.ByteArray.Length)
(throw Out of bounds copy exception)