将非托管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 ^的主要内容,如果未能解决你的问题,请参考以下文章

为 Media Foundation 生成托管包装器

如何从 PathName 获取 Project Guid 和 Model Guid?

将非托管 EXE 作为资源合并到托管 C# 代码中

使用 EWS 托管 API 读取自定义列

从非托管代码更新性能计数器

如何将挂载点的卷 GUID 转换为实际路径?