Ich gehe davon aus, dass Sie kein C++-Programm haben möchten, das beim Starten jenes Dateiformatdokuments liest und dann die tatsächliche Datendatei auf dieser Grundlage analysiert. Stattdessen möchten Sie einfach ein C++-Programm, das ausschließlich zur Lektüre der aktuellen Version dieses Dateiformats bestimmt ist? (Das ist viel einfacher und wird schneller ausgeführt). Sie müssen kein ASM verwenden. Was Sie tun müssen, ist die C++-Typen herauszufinden, die den in der Formatdatei verwendeten Namen entsprechen. Zum Beispiel denke ich, dass DWORD in Microsoft-Sprachen verwendet wird, um auf eine ganze Zahl einer bestimmten Größe - vielleicht 32 oder 64 Bits - zu verweisen. Finden Sie diese Infos heraus und erstellen Sie dann C++-Strukturen mit entsprechenden Elementen.
Zum Beispiel:
#include // falls auf Windows, probieren Sie stattdessen __int32, __int64 etc.
typedef int64_t DWORD; // oder welche Breite Sie auch immer finden
typedef int32_t WORD;
typedef ??? ZSTR; // recherchieren Sie es...?
typedef float FLOAT;
struct dds
{
ZSTR path;
WORD is_skin;
WORD alpha_enabled;
WORD two_sided;
WORD alpha_test_enabled;
WORD alpha_ref;
WORD z_write_enabled;
WORD z_test_enabled;
WORD blending_mode; // None = 0, Custom = 1, Normal = 2, Lighten = 3
WORD specular_enabled;
FLOAT alpha;
WORD glow_type; // None = 0, NotSet = 1, Simple = 2, Light = 3, Texture = 4, TextureLight = 5, Alpha = 6
FLOAT red;
FLOAT green;
FLOAT blue;
};
// zeige mit p auf den gesamten Eingang, den Sie irgendwo im Speicher geladen haben werden
// (z.B. Dateigröße über f/stat() ermitteln, dann Heap zuweisen und darin lesen oder Mappings vornehmen)
const char* p = input;
DWORD mesh_count = *(const DWORD*)p;
p += sizeof(DWORD);
for (int i = 0; i < mesh_count; ++i)
{
const dds& d = *(const dds*)p;
// Sie können d.red, d.alpha usw. hier verwenden, um alles zu tun, was Sie möchten
p += sizeof dds;
}
// setzte die Verarbeitung des Effektzählers etc. in gleichem Stil fort
MfG, Tony