define-Wert abfragen
-
hi
Angenommen ich kenne den Namen (als String) einer #define-Konstante.
Wie kann ich über den Namen zu dem definierten int-Wert kommen bzw. ihn abfragen?
-
zur laufzeit gar nicht.
-
doch mach dir nen button mit ner funktion
drin schreibst du
HWND hWnd; GetDlgItem(IDC_DEINBUTTON,&hWnd); CString f; f.Format("%i",::GetDlgCtrlID(hWnd)); MessageBox(f);
-
Im Visual Studio reicht es eigentlich wenn du einfach mit der Maus über die Konstante fährst, dann wird dir der Wert als Tooltip eingeblendet.
-
opengl_noob schrieb:
hi
Angenommen ich kenne den Namen (als String) einer #define-Konstante.
Wie kann ich über den Namen zu dem definierten int-Wert kommen bzw. ihn abfragen?Das ist kein Name! Ein define ist ein Platzhalter für etwas. In diesem Fall bei einer Variable für einen int, besser unsigned int!
Während der Laufzeit gibt es nur noch den int! Aber im Programmcode benutzt man natürlich den Text/Platzhalter, denn der ist einfach lesbarer!
-
Die Sache ist, ich möchte 800 Wave-Dateien importieren und per Zufall die jeweilige Wave abspielen.
Und zwar über den String-Namen, den ich aus den Zufallswerten generiere (quasi der Platzhalter als String).
Ich kann ja keinen switch-case Block mit 800 Fällen schreiben.
Ich muss die Waves also zur Laufzeit ansprechen.
Könnte es da nicht eine Funktion geben, die zu dem (String-)Platzhalter den int ermittelt?
Ansonsten ist die großflächige Arbeit mit Ressourcen ja unmöglich.
Der int-Wert bringt mir in meinem Fall nichts.
Ich werd mal Montag ausführlich googeln
-
Grml... vllt erläuterst du uns mal dein Bild von einem "#define" ... damit wir sehen wo es alles bei dir fehlt ...

-
Verwende statt defines halt einfach nen int-vector oder string-vector.
-
Also ein #define wird vom Präprozessor ausgeführt, da sieht noch nichtmal der Compiler den Namen, den du vergeben hast (vom Programm ganz zu schweigen).
Du benötigst eher ein Array oder einen Vector, in den du deine Dateinamen reinpacken kannst (vector hätte den Vorteil, daß du auch zur Laufzeit Namen dazufügen und ersetzen kannst).
vector<string> waves; ... size_t index = rand()%waves.size(); PlayWave(waves[index]);
-
Hab mich wohl etwas unklar ausgedrückt.
Mit VS C++ kann man wav-Dateien als Ressourcen ins Projekt importieren.
Dadurch werden die waves in die exe reinkompiliert.
Und die Ressourcen-IDs stehen als #defines in einer Resourcen-header-Datei.
Aber ich werds jetzt anders lösen und die waves aus einem externen Ordner über einen relativen Pfad aufrufen.
Trotzdem danke für die Hilfe
-
opengl_noob schrieb:
Hab mich wohl etwas unklar ausgedrückt.
Mit VS C++ kann man wav-Dateien als Ressourcen ins Projekt importieren.
Dadurch werden die waves in die exe reinkompiliert.
Und die Ressourcen-IDs stehen als #defines in einer Resourcen-header-Datei.OK, soweit, so gut. Und wo genau ist jetzt das Problem?
(der Punkt ist: Im Quelltext hast du zwar noch deine #define Konstanten als Bezeichner stehen, im fertigen Programm bleiben davon nur die int-Werte zurück und die kann dir niemand mehr eindeutig zu ihrem Namen zuordnen)