| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
mamntc02
Registrado: 30 Abr 2007 Mensajes: 277
| Publicado: 20/08/2007 5:03 am | | | Título: Empezando SDL |
| Hola,
Bueno, por fin voy empezando con SDL, y como no, me empiezan a salir dudas. El problema es q me estan saliendo demasiado pronto 
Primer código chorra:| Código: | #include <SDL/SDL.h> #include <stdio.h>
int main(int argc, char** argv) { printf("Initializing SDL.\n"); // Initialize defaults, Video and Audio if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) { printf("Could not initialize SDL: %s.\n", SDL_GetError()); exit(-1); } printf("SDL initialized.\n"); printf("Quiting SDL.\n"); // Shutdown all subsystems SDL_Quit(); printf("Quiting....\n");
return 0; }
| Compilado con MinGW mediante la instrucción| Cita: | | g++ -o prova.exe prova.cpp -lmingw32 -lSDLmain -lSDL |
Compila perfectamente, no obstante al ejecutarlo ninguno de los printf se muestra. Por qué?
Si elimino toda referencia a SDL excepto el include, es decir:| Código: | #include <SDL/SDL.h> #include <stdio.h>
int main(int argc, char** argv) { printf("Initializing SDL.\n"); printf("Quiting....\n");
return 0; } | Tampoco imprime nada, siempre y cuando compile de la misma manera. En cambio, si compilo normalmente:| Cita: | | g++ -o prova.exe prova.cpp |
Me devuelve un error de linkage, q no puede encontrar WinMain16. Por lo q me parece SDL modifica el main, para q sea un WinMain. Puede ser? Q hace exactamente? Lo q me induce a otra pregunta: Se le debe decir al compilador q la aplicación es para windows (lo q sería en gcc el '-mwindows')? Igualmente, q pasa con los printf q no imprime? Está redireccionando la salida estandard (stdout y/o stderr) hacia otro dispositivo? Hacia donde?
Se q son muchas preguntas a la vez, pero creo q son muy básicas para quien tenga conocimientos del SDL.
Gracias y saludos. |
| | Volver arriba | |  | _Martin_

Registrado: 03 Ago 2006 Mensajes: 165
| Publicado: 20/08/2007 6:57 am | | | Título: |
| Hola, el primer codigo funciona. El problema es que SDL crea una ventana y la funcion printf no puede escribir sobre ella como lo haria sobre la mitica ventana del DOS. No obstante, en algunos IDEs se puede apresiar que se abre una vantana auxiliar (ademas de la pantalla principal) en la que si se ve n los textos de printf. Esta ventana NO es parte del programa y se abre para que el programador sepa lo que sucede. Ahora bien, sin importar que IDE tengas, SDL redirecciona los textos de printf a un archivo auxiliar llamado stdout que se deberia encontrar en la carpeta donde se encuentra tu ejecutable. (Tambien crea otro archivo llamado stderr para informar sobre los errores, y si estos no existen, el archivo se borra automaticamente)
Ahora bien, como se puede "escribir" en una ventana SDL???. Para ello debes usar una libreria auxiliar (como por ejemplo SDL_TTF) Veras que tambien tiene sus limitaciones pero tambien hay solucion para ello.
Saludos |
| | Volver arriba | |  | mamntc02
Registrado: 30 Abr 2007 Mensajes: 277
| Publicado: 20/08/2007 10:43 pm | | | Título: |
| Muchas Gracias.
Al final, ayer ya me di cuenta de q me los grababa en ficheros stdout.txt y stderr.txt. También me di cuenta de como modifica la función main a WinMain, por lo q siempre se debe declarar main(). Si hubiera leído un poco más antes de preguntar... hehehehe. También he leído q se puede definir NO_STDIO_REDIRECT para q no los envíe a un archivo, el problema es q el link donde estaba explicado no funcionaba. Alguien sabe si funciona algo así?
Lo q te refieres de la ventana, sí q es un terminal (ventana DOS), ya q compilo y ejecuto desde un terminal, no suelo usar ningún IDE.
Saludos y gracias de nuevo. |
| | Volver arriba | |  | | Killrazor
Registrado: 24 Ene 2006 Mensajes: 1182 Ubicación: Barcelona
| Publicado: 21/08/2007 12:16 am | | | Título: |
| Recuerda que SDL no modifica el main sino lo substituye. Por eso es tan estricto en la manera en que lo escribes: tiene que ser
| Código: | int main(int argc, char** argv) |
| Cita: | No obstante, en algunos IDEs se puede apresiar que se abre una vantana auxiliar (ademas de la pantalla principal) en la que si se ve n los textos de printf.
|
En realidad, lo que hacen algunos IDEs como Visual C++ es dejarte elegir si quieres lanzar el programa como windows o desde linea de comandos. Si lo lanzas desde linea de comandos primero abre una ventada de sistema y desde alli se lanza el programa. Es justamente aqui donde van las salidas estandar. _________________ I wanna heal i wanna feel like I'm close to something real. I wanna find something I've wanted all along somewhere i belong |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |