5 Stimmen

Was ist der sauberste Weg, um binäre Daten in VC++ Express einzubinden und darauf zuzugreifen?

Ich habe einige Binärdateien, die ich gerne in eine DLL einbetten würde, die ich mit VC++ Express Edition kompiliere.

Ich habe ein paar Möglichkeiten, es zu tun (wie die Daten in Arrays konvertieren, die ich zusammen mit dem Code kompilieren), aber ich bin nicht zufrieden und ich fühle mich wie ich bin wahrscheinlich eine einfache, unkomplizierte Lösung fehlt.

Was ist die sauberste und einfachste Methode, dies zu tun?

15voto

Chris Lutz Punkte 69879

Ich weiß nicht, ob das eine Option ist, aber das Unix-Programm (und wahrscheinlich auch das unter Windows verfügbare) xxd verfügt über eine Option zur Ausgabe eines C-Headers:

xxd -i file.bin > file.h

file.h enthält die Definition eines Arrays von unsigned char mit den Daten und einem unsigned int die Ihnen die Länge des Arrays angibt. Natürlich kann es besser sein, die Ausgabe nach file.c und schreiben dann file.h als:

extern unsigned char file[];
extern unsigned int file_len;

Die Namen der Variablen hängen von der Eingabedatei ab. Ich hoffe, das hilft.

1 Stimmen

Heh. Google Desktop hat meine Festplatte durchsucht und ich habe bereits xxd! Kam mit Vim. Danke!

0 Stimmen

Die Ressourcen-Antwort von Vinay Sajip ist näher an das, was ich gefragt wurde, aber mit xxd ist so einfach, dass ich beschlossen, den benutzerdefinierten Code, den ich geschrieben hatte, und verwenden Sie es stattdessen zu werfen. Wenn meine Dateien größer wären, würde ich vielleicht die binären Ressourcen wählen.

2voto

Vinay Sajip Punkte 89444

Das letzte Mal, als ich dies tun musste (vor einiger Zeit), habe ich binäre Ressourcen verwendet. Hier ist ein Artikel die den Ansatz beschreibt. Ich bin mir allerdings nicht sicher, ob es etwas Neueres gibt, das dies besser macht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X