将非托管GUID转换为托管Guid ^
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将非托管GUID转换为托管Guid ^相关的知识,希望对你有一定的参考价值。
我是C ++ / CLI的新手,我正在尝试将本机C ++ GUID转换为我的C ++ / CLI Guid ^。在尝试转换时:
BlockInfo^ blockInfo = gcnew BlockInfo();
blockInfo->BlockFilterGuid = ba.BlockAllFilter.subLayerKey;
...我收到以下错误:
错误C2440:'=':无法从'GUID'转换为'System :: Guid ^'
我知道我的问题的根源是我试图从非托管类型转换为托管类型,但我在C ++或C ++ / CLI中不足以知道如何解决问题。
答案
本地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]);
}
另一答案
之前的答案很好,但这真的应该足够了:
Guid FromNativeGUID(const GUID &guid)
{
return *reinterpret_cast<Guid *>(const_cast<GUID *>(&guid));
}
以上是关于将非托管GUID转换为托管Guid ^的主要内容,如果未能解决你的问题,请参考以下文章