managed Guid из native GUID
От: Аноним  
Дата: 27.10.06 10:57
Оценка:
Привет. Провожу первые эксперименты с managed С++. Сразу возник вопрос: каким образом можно превратить (следует превращать) нативный GUID в managed Guid? Думаю, что можно через конверсию GUID-а в строку, но это как-то...
Спасибо
Re: managed Guid из native GUID
От: Аноним  
Дата: 28.10.06 10:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет. Провожу первые эксперименты с managed С++. Сразу возник вопрос: каким образом можно превратить (следует превращать) нативный GUID в managed Guid? Думаю, что можно через конверсию GUID-а в строку, но это как-то...

А>Спасибо

Смотри в MSDN "Interop Marshaling", в частности аттрибут MarshalAs.
GUID не передавал, и, честно говоря, лень пробовать. Но — GUID это структура. Определяешь её в managed коде(4 поля кажется, uint. Каждое поле определяешь с собственным аттрибутом MarshalAs.), обязательно задаешь последовательное расположение аттрибутом StructLayout[Sequential]. Передаешь её в параметре с аттрибутом MarshalAs[Struct](хотя может тебе надо передавать как указатель на структуру — тогда посмотри соответствие параметра для unmanaged в managed, однозначно void* — IntPtr ).Можешь указать аттрибут Out/In для направления передачи.
Вроде всё.
Но может для GUID можно всё проще сделать, есть value-тип Guid в Framework — посмотри, может его можно приспособить.
Re[2]: managed Guid из native GUID
От: Аноним  
Дата: 29.10.06 20:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>GUID не передавал, и, честно говоря, лень пробовать. Но — GUID это структура.

Что такое нативный GUID — это понятно. Вопрос скорее наоборот — что такое managed Guid.

А>Но может для GUID можно всё проще сделать, есть value-тип Guid в Framework — посмотри, может его можно приспособить.

Я сейчас так делаю: конвертирую нативный GUID в юникодовскую строку, каковую передаю параметром конструктору безымянного объекта System::String, ссылку на который, в свою очередь, передаю в конструктор managed Guid-а (во как). В двух словах:

wchar_t wsz[48];
StringFromGUID2(guid, wsz, sizeof(wsz)/sizeof(wchar_t));
System::Guid mg(gcnew System::String(wsz));
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.