我是C ++ / CLI的新手,我正在尝试将原生C ++ GUID转换为我的C ++ / CLI Guid ^。在尝试转换时:
BlockInfo^ blockInfo = gcnew BlockInfo();
blockInfo->BlockFilterGuid = ba.BlockAllFilter.subLayerKey;
...我收到以下错误:
错误C2440:'=':无法从'GUID'转换为'System :: Guid ^'
我理解我的问题的根源是我尝试从非托管类型转换为托管类型,但我在C ++或C ++ / CLI中不足以了解如何解决问题。
答案 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));
}