CLI 到本机字节数组转换

CLI to native byte array translation

本文关键字:数组 转换 字节数 字节 本机 CLI      更新时间:2023-10-16

这是我从 CLI 到本机的转换字节数组的变体:

byte* GetNative(array<System::Byte, 1> ^ byteArray) {
    try {
        pin_ptr<unsigned char> array_pin = &byteArray[0];
        return (byte*) array_pin;
        }
    catch(...) {
        return 0;
        }
    }

我的问题是关于array_pin.我想我需要删除它,但是如果我删除它,那么带有byte*指针的变量将被破坏(或者至少可能被破坏)。

使用此变体安全吗?或者,我必须如何以及何时删除array_pin?有没有更简单的方法来实现字节转换?

一旦超出

范围,array_pin就会被取消固定,例如,当GetNative返回时。然后,垃圾回收器可能会移动或收集基础托管数组,使返回的byte*悬而未决,这将导致取消引用时损坏。

由于pin_ptr不能是成员变量,并且不能将其从函数中传递回去,因此您需要在非托管数组仍在范围内时对非托管数组执行所有操作array_pin或者将数据从固定数组复制到其他地方(例如,std::array)。