views:

144

answers:

1

I'm brand new to C++/CLI and I am attempting to convert a native C++ GUID to my C++/CLI Guid^. When attempting my conversion:

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

...I recieve the following error:

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

I understand that the root source of my problem is that am trying to convert from an unmanaged to a managed type, but I'm not proficent enough in either C++ or C++/CLI to know how to solve the issue. Can anyone point me in the right direction?

+2  A: 

A native GUID is defined:

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

You need to allocate a System::Guid and construct it properly using the data in the 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]);
}
Daniel Earwicker