是否可以像C#
中的pin_ptr
一样在C++/CLI
创建固定指针?
答案 0 :(得分:1)
一般解决方案:
GCHandle handle = GCHandle.Alloc(myObject, GCHandleType.Pinned);
try
{
IntPtr myPinnedPointer = handle.AddrOfPinnedObject();
// use myPinnedPointer for your needs
}
finally
{
handle.Free();
}
特殊情况:
如果您的对象是结构数组或字符串,和允许您在项目中使用不安全的代码,则可以使用fixed
上下文:
unsafe
{
fixed (char* myPinnedPointer = myString)
{
// use myPinnedPointer for your needs
}
}
答案 1 :(得分:1)
在C#中有fixed
关键字,你可以使用System.GCHandle
结构,没有任何东西有&#34; power&#34; pin_ptr<>
。使用pin_ptr<>
可以固定任何托管对象,而使用fixed
时,您只能固定string
或不包含引用类型的值类型数组。因此,您可以固定int[]
,MyEnum[]
或MyStructWithoutReferenceTypes[]
,而不是MyClassType
或MyClassType[]
。