cli :: array <byte>作为混合类</byte>中的成员

时间:2013-12-02 09:48:10

标签: c++-cli mixed-mode pin-ptr

我希望将托管缓冲区作为混合类中的成员:

class A {
    cli::array<Byte> m_managedBuffer;
}

这导致:

  

错误C3265:无法在非托管“A”中声明托管“m_managedBuffer”

所以我尝试使用auto_gcroot:

class A {
    auto_gcroot<cli::array<Byte> ^> m_managedBuffer;
}

并收到以下错误:

  

错误C2106:'=':左操作数必须是l值

我的解决方案是使用托管包装器

ref class ByteArray
{
    public:
    ByteArray(size_t size) {
          m_bytes = gcnew cli::array<Byte>(size);
    }

    cli::array<Byte> ^ m_bytes;
};

我不喜欢这个,因为它引入了一个间接级别来获取实际的缓冲区,而且,当我想固定托管缓冲区(pin_ptr)时 - 我该怎么做?我可以在没有固定外部ByteArray对象的情况下固定内部m_bytes memeber吗?

  

解决方案:使用gcroot而不是auto_gcroot。托管字节数组   将由GC清理,不必在auto_gcroot下。

0 个答案:

没有答案