Si alguna vez usaste la herramienta Game Maker, es un poco así. Quiero ser capaz de tomar todos mis sonidos, imágenes y todo lo demás e incrustarlos en un solo ejecutable de C++. Game Maker tendría un editor incorporado, y tendría las imágenes incrustadas en el archivo .gmk, y cuando lo abrieras leería las imágenes y las mostraría en el juego. Estoy pensando que guardó las imágenes no como imágenes, sino como datos puros almacenados en el archivo .gmk e interpretados por el editor o por algún intérprete escrito en .exe. ¿Cómo podría hacer algo similar?¿Cómo incrustar recursos en un solo ejecutable?
Respuesta
El sistema de recursos de Windows funciona de esta manera, por lo que si hace una aplicación WinAPI o MFC, puede usar esto. Además, Qt proporciona la misma funcionalidad, pero de una manera independiente de la plataforma. Simplemente escriben los archivos en formato binario sin formato en una matriz de bytes en un archivo C++ normal, por lo que se compilan como datos en el archivo ejecutable. Luego brindan funciones para acceder a estos bloques de datos como archivos normales, aunque no sé cómo funcionan realmente. Probablemente una implementación especial de su clase de archivo que simplemente accede a esas variables de matriz de bytes.
Para las imágenes solamente, un enfoque muy simple es usar el formato XPM.
Este formato es un encabezado C/C++ válido, por lo que puede incluirlo directamente en un archivo fuente C++ y usarlo directamente.
El problema principal con este enfoque es que XPM no es un formato comprimido, por lo que usa mucho almacenamiento. En consecuencia, en la práctica solo vi esto usado para iconos y pequeños objetos gráficos, pero en principio se podía hacer más.
La otra cosa interesante de XPM es que es legible por humanos, una vez más genial para diseñar iconos pequeños y simples.
Para generalizar esta idea a otros formatos, lo que podría hacer es crear una cadena de compilación que:
- codifica el archivo de destino como ASCII (Uuencode o tal)
- Resulta que en un solo nombre C Cadena en un archivo fuente.
- crear un encabezado acaba de declarar el nombre
- Definir una función de recuperación de la forma binaria de la cadena
- 1. Incrustar recursos en ejecutable usando GCC
- 2. Incrustar recursos de localización .DLL en el ejecutable en C#?
- 3. Cómo incrustar un ejecutable en mi proyecto
- 4. Incrustar archivos DLL en un ejecutable compilado
- 5. ¿Incrustar un JRE en un ejecutable de Windows?
- 6. cómo incrustar un archivo xml en un archivo de recursos
- 7. Incrustar un ejecutable binario en un script de shell
- 8. Incrustar un archivo ejecutable externo dentro de un programa C#
- 9. incrustar automáticamente múltiples iconos en un .NET ejecutable
- 10. Incrustar recursos (imágenes, bits de sonido, etc.) en un proyecto Java y luego usar esos recursos
- 11. ¿Cómo incrustar imágenes en un solo archivo HTML/PHP?
- 12. ¿Cómo puedo fusionar System.Data.SQLite en un solo programa ejecutable?
- 13. ¿Cómo incrustar un archivo de texto en un ensamblado .NET?
- 14. py2exe - generar solo archivo ejecutable
- 15. Incrustar datos en un programa C++
- 16. Cómo incrustar jar en HTML
- 17. ¿Cómo incrustar .tlb como un archivo de recursos en .NET Assembly DLL?
- 18. ¿Cómo incrustar un archivo .mov en HTML?
- 19. ¿Cómo incrustar archivos multilenguaje * .resx (o * .resources) en un solo EXE?
- 20. Crear solo módulo ejecutable de python
- 21. ¿Cómo incrustar Ruby en C++?
- 22. REST api: solicitando múltiples recursos en un solo obtener
- 23. compilación Erlang - Erlang como ejecutable solo
- 24. Cómo incrustar un UITableView en una UIScrollView
- 25. ¿Cómo incrustar imágenes locales en UIWebView?
- 26. Cómo hacer un ejecutable phar?
- 27. ¿Cómo incrustar fuentes en HTML?
- 28. ¿Cómo incrustar los contenidos de un CALayer?
- 29. Cómo cargar un archivo ejecutable ELF ejecutable dinámicamente?
- 30. Incrustar Tomcat-7 para ejecutar solo en https
muy interesante. Supongo que es solo otra de esas cosas de Microsoft, como DirectX o WinAPI. Muy útil en funcionalidad, pero no en plataforma cruzada. Pero es bueno ver que QT tiene una funcionalidad similar. – Keelx
MSDN's Using Resources (Windows): https://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx – Andrew