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

标签 casting c++-cli

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

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

...我收到以下错误:

error C2440: '=' : cannot convert from 'GUID' to 'System::Guid ^'

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

最佳答案

native GUID 已定义:

typedef struct _GUID {
    DWORD Data1;
    WORD  Data2;
    WORD  Data3;
    BYTE  Data4[8];
} GUID;

您需要分配一个 System::Guid 并使用 native 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]);
}

关于casting - 将非托管 GUID 转换为托管 Guid^,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2306062/

相关文章:

c - C 中的指针与类型转换

c++ - 涉及私有(private)继承的 C 风格向上转型和向下转型

visual-studio-2008 - 如何清除 System::Windows::Forms::PictureBox^ cpp 的内存

c++ - static/dynamic/const/reinterpret_cast 可以在未评估的上下文中使用吗?

c# - RavenDB 加载相关数据不起作用

c - 如何强制转换 void* 结构成员?

c++ - 在没有 Pdb 文件的情况下在 Visual Studio 中进行调试(C++ 访问冲突)

c# - 在 C# 通用接口(interface)中实现通用 C++/CLI 接口(interface)

visual-c++ - 对每个使用 'auto' 会导致 C3539 - 为什么?

javascript - 使用 CEFSharp native 函数不会刷新 DOM