Mich interessiert, was in der letzten Zeile passiert: welchen Feldern der struct wird welcher Wert zugewiesen? Mir kommt die Sache etwas spanisch vor, vermutlich findet irgendeine implizite Konvertierung statt, aber so tief kenne ich mich mit C/C++ leider nicht aus.
Falls jemand gleich noch ein Beispiel hat, wie ich ein Äquivalent zu NFAUUID (d.h. einen identisch initialisierten Wert) aus C# per P/Invoke übergebe, wäre das für mich das Tüpfelchen auf's i.
Danke an alle für drei nahezu gleichwertige Antworten. Ich kann leider nur eine akzeptieren und habe mich für Dustin entschieden, weil ich den Stackoverflow-Link nützlich finde, und weil er mir mit dem Hinweis auf die Semantik von 0x1f eine Frage beantwortet hat, die ich noch gar nicht gestellt hatte ;-)
Der Knackpunkt war letztlich aber für mich, das es in C offenbar möglich ist, eine struct auf die angegebene Weise mit einem Array zu initialisieren und dabei die Elemente einzeln und der Reihe nach (! Beim Gedanken daran, dass jemand mal bei einer Codeverschönerungsaktion die struct umsortiert graut es mir) den Feldern der struct zugewiesen werden.
Ich denke das struct an sich ist ja klar. Vier Variablen innerhalb des structs, sowie die direkte Deklaration von GUID als Variable vom Typ _GUID. Durch die typedef Deklaration gibst du dem zusammengesetzten Datentyp GUID den Alias UUID (siehe CPP Reference).
Die letzte Zeile deklariert nun eine neue Variable namens NFAUUID vom Typ UUID und initialisiert diese direkt. Nun könnte man mit der Dot-Notation auf die einzelnen Werte zugreifen, oder diese in der oben festgelegten Reihenfolge "befüllen".
In diesem Fall also 136, 119, 102, 'U', 'D', '3', '"' und einem sog. Einheitentrenner. Die letzten 4 chars sollten also in deinem Data4 Array gespeichert werden. Die ersten 3 Zahlen dagegen in den Variablen Data1 bis Data3.
*UPDATE* Habe noch einen, hoffentlich, passenden Link für dich zum P/Invoken gefunden. Das Ganze kannst du mit Marshalling realisieren (siehe Stackoverflow).
NFAUUID ist eine Variable vom Typ struct _GUID, die aus 11 Elementen besteht (einem unsigned long, zwei unsigned shorts und 8 chars). Die acht Werte in den Mengenklammern werden den ersten 8 Elementen zugewiesen:
Mit dem ersten typedef wird neben der Struktur _GUID auch ein neuer Typ GUID erzeugt. Dann wird ein weiterer Typ UUID aus GUID erzeugt.
Z.B. kann man auch
typedef int zahl
machen und dann sowohl
int i = 5;
als auch
zahl i = 5;
schreiben
Die Struktur hat einen Umfang von 16 Bytes => sizeof(GUID)
unsigned long => 4 Bytes (1x) unsigned short => 2 Bytes (2x) unsigned char => 1 Byte (8x)
also 4 + 2 * 2 + 8 * 1 = 16 Bytes
UUID NFAUUID = {0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x1F}; => 13 Bytes. Die letzten 3 Bytes werden damit nicht belegt und werden mit 0 initialisiert.