【问题标题】:In CLR, C++ code do I need to allocat memory before calling Marshal::StructureToPtr在 CLR 中,C++ 代码是否需要在调用 Marshal::StructureToPtr 之前分配内存
【发布时间】:2016-03-17 07:25:54
【问题描述】:

我有以下代码可以将托管转换为非托管,反之亦然,

template<typename M, typename N>
class MNConv
{
public:
    /// Native to Managed
    static M N2M(N* pNative){
        return safe_cast<M>(Marshal::PtrToStructure(IntPtr(pNative), M::typeid));
    };
    // Managed to Native
    static void M2N(M managed, N* pNative){
        Marshal::StructureToPtr(managed, IntPtr(pNative), true);
    };
};

我需要打电话给AllocHGlobal吗?如果有,应该怎么称呼?

【问题讨论】:

    标签: c++ clr managed-c++


    【解决方案1】:

    根据 MSDN,您应该在调用 StructureToPtr 之前分配非托管内存块。我知道您应该在更高范围内对本机指针执行Marshal::AllocHGlobal,稍后您还可以在其中执行Marshal::FreeHGlobal。 仔细阅读ptr parameter description

    使用AllocHGlobal 也很简单——传递一个包含要分配的字节数的Int32IntPtr 对象。

    还请注意,您应该分别在M2NN2M 中接收和返回M^M 的处理程序/托管引用)。

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2011-03-08
      • 1970-01-01
      相关资源
      最近更新 更多