use*_*451 5 c# arrays pointers c++-cli managed
好吧,我知道你通常会如何声明一个指针:
void SomeFunction(array<float> ^managedArray)
{
pin_ptr<float> managedArrayPtr = &managedArray[0];
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,除非managedArray不包含任何元素.在这种情况下,它会抛出IndexOutOfRangeException.
在C#中你可以这样做:
void SomeFunction(float[] managedArray)
{
fixed (float* managedArrayPtr = managedArray)
{
}
}
Run Code Online (Sandbox Code Playgroud)
即使managedArray为空,也没有内存访问权限.我是否真的必须检查每个地方使用指向托管数组的指针的元素数量,或者C++/CLI是否有办法像C#那样做?它应该使用ASM中的'lea'指令,它不进行内存访问.
任何帮助是极大的赞赏!
好问题。不幸的是我对 C++/CLI 不太熟悉。我确实知道您可以使用结构手动进行固定GCHandle
,并且可以处理空数组。但它并不像使用那样优雅pin_ptr
。
void SomeFunction(array<float> ^managedArray)
{
GCHandle handle = GCHandle::Alloc(managedArray, GCHandleType::Pinned);
try
{
float* ptr = (float*)(void*)handle.AddrOfPinnedObject();
}
finally
{
handle.Free();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5218 次 |
最近记录: |