gpt4 book ai didi

interop - 固定一个空数组

转载 作者:行者123 更新时间:2023-12-04 11:59:58 26 4
gpt4 key购买 nike

在 C++/CLI 中,是否可以固定不包含元素的数组?

例如

array<System::Byte>^ bytes = gcnew array<System::Byte>(0);
pin_ptr<System::Byte> pin = &bytes[0]; //<-- IndexOutOfRangeException occurs here

MSDN 给出的建议不包括空数组的情况。
http://msdn.microsoft.com/en-us/library/18132394%28v=VS.100%29.aspx

顺便说一句,您可能想知道为什么我要固定一个空数组。简短的回答是,为了代码简单,我想将空数组和非空数组一视同仁。

最佳答案

不,不是 pin_ptr<>。您可以回退到 GCHandle 以实现相同的目标:

using namespace System::Runtime::InteropServices;
...
array<Byte>^ arr = gcnew array<Byte>(0);
GCHandle hdl = GCHandle::Alloc(arr, GCHandleType::Pinned);
try {
unsigned char* ptr = (unsigned char*)(void*)hdl.AddrOfPinnedObject();
// etc..
}
finally {
hdl.Free();
}

听起来你应该使用 List<Byte>^相反顺便说一句。

关于interop - 固定一个空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5478052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com