2009-03-24 21 views
3

In C++ können wir Mitglieder einer in der folgenden Art und Weise guid Zugang:Zugriff auf Guid Mitglieder in C#

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

Die Struktur der guid in C++ ist:

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

Frage: Wie das übersetzen dritte Zeile im C++ Code (dwRand = guid.Data1 & 0x7FFFFFFF;). Mit anderen Worten: Wie kann man auf guid-Mitglieder zugreifen? So etwas gibt es in C# nicht.

Vielen Dank im Voraus!

+0

Ist das .NET C++ oder Standard C++? Wenn letzteres, woher bekommst du deine GUID-Klasse? – strager

+0

FYI: seit einigen (ziemlich alten) Version von Windows, GUIDs sind nicht auf einfache Weise aus dem MAC, Datum/Uhrzeit und Randomizernummer oder was auch immer komponiert. Versuchen Sie ein paar GUIDs mit guidgen zu generieren. –

Antwort

4

Sie können eine Struktur erstellen:

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); 
    } 
} 

Nun, wenn Sie eine Guid ändern möchten:

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

Sie können Guid.ToByteArray verwenden, um die Werte als Bytes abzurufen, aber es gibt keine Zugriffsmethoden/Eigenschaften für die "gruppierten" Bytes. Sie könnten sie immer als Erweiterungsmethoden schreiben, wenn Sie C# 3 verwenden.

+0

+1 für "das habe ich gemeint." :-) – Moose

Verwandte Themen