2013-02-15 5 views
1

Я хочу спросить, отличается ли декларация GUID на C++ от C#. Я столкнулся с этим в C#:Использование GUID в C++:

GUID InterfaceClassGuid = {0x4d1e55b2, 0xf16f, 0x11cf, 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}; 

Является ли это жизнеспособным в C++? Если нет, то как его можно преобразовать? Благодарю.

ответ

2

Определение GUID в <windows.h> совместимо с этим синтаксисом. Он также работает в C.

+0

Когда мне это нравится, я получаю красный текст возле интерфейса ClassClassGuid в отладчике. Авто, как это: 4D1E55B2-F15F-11CF-88CB-001111000030 (в красном). Это нормально? – AverageAtBest

+0

@Aсредствоваемое: красный - это потому, что наблюдаемое значение изменилось (ОК, это было целью вашего заявления). Показанный формат немного компактнее. Он не учитывает «0x» и объединяет последние 6 байтов. Тем не менее, то же самое значение. – MSalters

2

В стандартном C++ отсутствует тип GUID. Однако вы могли (и, возможно, некоторые поставщики компилятора) определить struct GUID, которые могут быть инициализированы таким же образом.

редактировать: Microsoft defines GUID следующим образом:

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

С этим определением, ваш код должен работать, как это.

1

Структура GUID отличается от C#. Она определяется

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

Если вы хотите, чтобы рассматривать его в качестве переменной вы будете делать это:

GUID guid = {0x4d1e55b2, 0xf16f, 0x11cf, {0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}}; 

Попробовать его, а также посмотреть здесь: SO

3

Самый простой, возможно (и удобно тоже) будет использовать MS конкретных __declspec(uuid:

class __declspec(uuid("{C1F400A4-3F08-11D3-9F0B-006008039E37}")) NullRenderer; 
GUID x = __uuidof(NullRenderer); 

Таким образом, у ou даже не нужно разделять компоненты GUID в исходном коде, но иметь его как истинное объявление GUID.

Смежные вопросы