2010-02-21 4 views
2

Je suis tout nouveau en C++/CLI et j'essaye de convertir un GUID C++ natif en mon Guid C++/CLI ^. Lors d'une tentative ma conversion:Conversion d'un GUID non géré en un Guid géré^

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

... Je reçois l'erreur suivante:

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

Je comprends que la source racine de mon problème est que je essaie de convertir un non géré à un type managé , mais je ne suis pas assez compétent en C++ ou C++/CLI pour savoir comment résoudre le problème.

Répondre

4

définit un GUID natif:

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

Vous devez allouer un System::Guid et construire en utilisant correctement les données dans le GUID natif.

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]); 
} 
+4

System :: Guid est un type de valeur. Votre fonction fonctionne très bien, mais le type de retour devrait être System :: Guid (au lieu de System :: Guid ^) et le gcnew devrait être supprimé. – Naaff

3

La réponse précédente est très bien, mais cela ne devrait vraiment être assez:

Guid FromNativeGUID(const GUID &guid) 
{ 
    return *reinterpret_cast<Guid *>(const_cast<GUID *>(&guid)); 
}