Sop*_*pus 8 c++ native c++-cli memcpy
我这样做了吗?
我得到一个指向本机数组的指针,需要复制到托管数组.将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);
Run Code Online (Sandbox Code Playgroud)
arrayCount是pArray的实际长度,因此并不担心这个方面.查看代码并从向量中复制数组.所以我可以安全地设置托管数组大小.
Han*_*ant 12
这有效,但不安全.当你得到arrayCount错误时,你会把垃圾收集堆吹到碎片上.很难诊断.
Marshal :: Copy()是安全的,同样快.
你做的几乎是正确的:
pin_ptr<Byte> pinPtrArray = &ManagedClass.ByteArray[ManagedClass.ByeArray->GetLowerBound(0)];
Run Code Online (Sandbox Code Playgroud)
Marshal::Copy 不安全且速度不快。在托管 C++ 中始终使用固定指针。
编辑:如果需要,您可以检查长度以确保 memcpy 不会首先超出范围,例如:
if (arrayCount > ManagedClass.ByteArray.Length)
(throw Out of bounds copy exception)
Run Code Online (Sandbox Code Playgroud)