2009-03-24 10 views
3

En C++, nous pouvons accéder à des membres d'un guid de la manière suivante:Accès aux membres Guid en C#

GUID guid = {0}; 
CoCreateGuid(&guid); 
dwRand = guid.Data1 & 0x7FFFFFFF; 

La structure de guid en C++ est:

Data 1 - unsigned long 
Data 2 - unsigned short 
Data 3 - unsigned short 
Data 4 - unsigned char 

Question: Comment traduire le troisième ligne du code C++ (dwRand = guid.Data1 & 0x7FFFFFFF;). En d'autres termes - comment accéder aux membres guid? Il n'y a pas de telle chose en C#.

Merci d'avance!

+0

Est-ce .NET C++ ou C++ standard? Si c'est le cas, d'où obtenez-vous votre classe GUID? – strager

+0

FYI: depuis certaines versions (assez anciennes) de Windows, les GUID ne sont pas composés de manière simple à partir du MAC, de la date/heure et du numéro de randomisation ou autre. Essayez de générer quelques GUID avec guidgen. –

Répondre

4

Vous pouvez créer une structure:

public struct MyGuid 
{ 
    public int Data1; 
    public short Data2; 
    public short Data3; 
    public byte[] Data4; 

    public MyGuid(Guid g) 
    { 
     byte[] gBytes = g.ToByteArray(); 
     Data1 = BitConverter.ToInt32(gBytes, 0); 
     Data2 = BitConverter.ToInt16(gBytes, 4); 
     Data3 = BitConverter.ToInt16(gBytes, 6); 
     Data4 = new Byte[8]; 
     Buffer.BlockCopy(gBytes, 8, Data4, 0, 8); 
    } 

    public Guid ToGuid() 
    { 
     return new Guid(Data1, Data2, Data3, Data4); 
    } 
} 

Maintenant, si vous souhaitez modifier un Guid:

Guid g = GetGuidFromSomewhere(); 
MyGuid mg = new MyGuid(g); 
mg.Data1 &= 0x7FFFFFFF; 
g = mg.ToGuid(); 
5

Vous pouvez utiliser Guid.ToByteArray pour obtenir les valeurs en octets, mais il n'y a pas de méthodes/propriétés d'accesseur pour les octets "groupés". Vous pouvez toujours les écrire en tant que méthodes d'extension si vous utilisez C# 3 cependant.

+0

+1 pour "c'est ce que je voulais dire." :-) – Moose

Questions connexes