【问题标题】:Converting an unmanaged GUID to a managed Guid^将非托管 GUID 转换为托管 Guid^
【发布时间】:2010-02-21 13:48:58
【问题描述】:

我是 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


    【解决方案1】:

    定义了原生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]);
    }
    

    【讨论】:

    • System::Guid 是一个值类型。您的函数运行良好,但返回类型实际上应该是 System::Guid(而不是 System::Guid^)并且应该删除 gcnew。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      相关资源
      最近更新 更多