是否可以在C#中创建固定指针?

时间:2016-02-24 13:39:22

标签: c# pointers c++-cli

是否可以像C#中的pin_ptr一样在C++/CLI创建固定指针?

2 个答案:

答案 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[],而不是MyClassTypeMyClassType[]