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

问题描述 投票:2回答:2

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

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

...我收到以下错误:

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

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

casting c++-cli
2个回答
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]);
}

3
投票

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

Guid FromNativeGUID(const GUID &guid)
{
    return *reinterpret_cast<Guid *>(const_cast<GUID *>(&guid));
}
© www.soinside.com 2019 - 2024. All rights reserved.