Преобразование неуправляемого GUID в управляемый Guid ^ - PullRequest
2 голосов
/ 21 февраля 2010

Я новичок в C ++ / CLI и пытаюсь преобразовать собственный GUID C ++ в мой C ++ / CLI Guid ^. При попытке моего преобразования:

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

... Я получаю следующую ошибку:

ошибка C2440: '=': невозможно преобразовать из 'GUID' в 'System :: Guid ^'

Я понимаю, что основной источник моей проблемы заключается в том, что я пытаюсь преобразовать из неуправляемого в управляемый тип, но я недостаточно опытен в C ++ или C ++ / CLI, чтобы знать, как решить проблему.

Ответы [ 2 ]

4 голосов
/ 21 февраля 2010

Определен нативный 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]);
}
3 голосов
/ 28 июля 2011

Предыдущий ответ в порядке, но этого действительно должно быть достаточно:

Guid FromNativeGUID(const GUID &guid)
{
    return *reinterpret_cast<Guid *>(const_cast<GUID *>(&guid));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...