将非托管GUID转换为托管Guid ^

时间:2010-02-21 13:48:58

标签: casting c++-cli

我是C ++ / CLI的新手,我正在尝试将原生C ++ GUID转换为我的C ++ / CLI Guid ^。在尝试转换时:

BlockInfo^ blockInfo = gcnew BlockInfo();
blockInfo->BlockFilterGuid = ba.BlockAllFilter.subLayerKey;

...我收到以下错误:

  

错误C2440:'=':无法从'GUID'转换为'System :: Guid ^'

我理解我的问题的根源是我尝试从非托管类型转换为托管类型,但我在C ++或C ++ / CLI中不足以了解如何解决问题。

2 个答案:

答案 0 :(得分:4)

定义了原生GUID

typedef struct _GUID {
    DWORD Data1;
    WORD  Data2;
    WORD  Data3;
    BYTE  Data4[8];
} GUID;

您需要分配System::Guid并使用原生GUID中的数据正确构建它。

System::Guid ^FromNativeGUID(const GUID &g)
{
    return gcnew System::Guid(g.Data1, g.Data2, g.Data3, g.Data4[0], g.Data4[1], g.Data4[2],
                        g.Data4[3], g.Data4[4], g.Data4[5], g.Data4[6], g.Data4[7]);
}

答案 1 :(得分:3)

之前的答案很好,但这确实应该足够了:

Guid FromNativeGUID(const GUID &guid)
{
    return *reinterpret_cast<Guid *>(const_cast<GUID *>(&guid));
}