Foros - Stratos

Stratos => Proyectos => Mensaje iniciado por: alessandros en 21 de Octubre de 2009, 08:03:17 PM

Título: Invasores del Espacio
Publicado por: alessandros en 21 de Octubre de 2009, 08:03:17 PM
Hola a todos!!

Tengo terminado un proyecto realizado con Microsoft Visual C++ y Dark GDK. Y funciona a la perfección cuando lo ejecuto desde el Debug, pero cuando trato de realizar un ejecutable con el Release me salta este fallo:

Excepción no controlada en 0x000001fa en Invasores del Espacio.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0x000001fa.


¿Sabeís de que puede ser? ¿A lo mejor para hacer el ejecutable se tiene que realizar de otra manera?

Gracias por todo y un saludo!!
Título: Re: Invasores del Espacio
Publicado por: Marci en 22 de Octubre de 2009, 08:49:58 AM
Normalmente si un programa funciona en modo Debug y luego falla al ejecutarlo en modo release es porque tienes variables sin iniciar (casi siempre puntero) en tu programa. En modo debug el compilador inicia a cero estas variables de forma autómatica.
Título: Re: Invasores del Espacio
Publicado por: alessandros en 22 de Octubre de 2009, 10:47:42 AM
Cita de: Marci en 22 de Octubre de 2009, 08:49:58 AM
Normalmente si un programa funciona en modo Debug y luego falla al ejecutarlo en modo release es porque tienes variables sin iniciar (casi siempre puntero) en tu programa. En modo debug el compilador inicia a cero estas variables de forma autómatica.

Ya he inicializado todas las variables y me sigue dando el mismo fallo. Por cierto despues de darle a continuar me salta también este fallo:

No se cargaron símbolos para ningún marco de pila de llamadas. No se puede mostrar el código fuente.

Gracias por la ayuda Marci
Título: Re: Invasores del Espacio
Publicado por: Vicente en 22 de Octubre de 2009, 11:18:00 AM
Lo de los símbolos es para poder depurar, no sé sin en el Visual C++ hay que chequear alguna opción para que se generen o que. Pero tu error suena a lo que dice Marci, algo relacionado con gestión de memoria.
Título: Re: Invasores del Espacio
Publicado por: [EX3] en 22 de Octubre de 2009, 12:20:50 PM
Seria interesante que generaras un archivo de texto con la ruta que sigue el codigo en ejecucion, osease, un log. Colocas llamadas para escribir texto al archivo en plan "puntos de control"  despues de ciertas llamadas, por ejemplo, despues de crear la ventana "Inicializacion de ventana: Ok", despues de inicializar la API grafica "Inicializacion de OpenGL: Ok", y asi en los puntos criticos donde pudiera fallar. De esta forma puedes hacer un depurado en modo release y asi mas o menos saber por donde puede estar petando el codigo.

Salu2...
Título: Re: Invasores del Espacio
Publicado por: alessandros en 22 de Octubre de 2009, 01:35:11 PM
Esto
Cita de: [EX3] en 22 de Octubre de 2009, 12:20:50 PM
Seria interesante que generaras un archivo de texto con la ruta que sigue el codigo en ejecucion, osease, un log. Colocas llamadas para escribir texto al archivo en plan "puntos de control"  despues de ciertas llamadas, por ejemplo, despues de crear la ventana "Inicializacion de ventana: Ok", despues de inicializar la API grafica "Inicializacion de OpenGL: Ok", y asi en los puntos criticos donde pudiera fallar. De esta forma puedes hacer un depurado en modo release y asi mas o menos saber por donde puede estar petando el codigo.

Salu2...

Estoy en ello, gracias.

Por cierto, ¿sabeís si se puede distruibir gratuitamente un videojuego realizado con Visual C++ siendo este una versión TRIAL?
Gracias de nuevo  ;)
Título: Re: Invasores del Espacio
Publicado por: [EX3] en 22 de Octubre de 2009, 02:31:15 PM
Version Trial? Yo pensaba que estabas con el VC++ Express :P

Salu2...
Título: Re: Invasores del Espacio
Publicado por: Vicente en 22 de Octubre de 2009, 03:32:31 PM
Cita de: alessandros en 22 de Octubre de 2009, 01:35:11 PM
Por cierto, ¿sabeís si se puede distruibir gratuitamente un videojuego realizado con Visual C++ siendo este una versión TRIAL?
Gracias de nuevo  ;)

Habría que ver la licencia, pero como dice EX3 te bajas el Express, lo compilas con ese y listo :p
Título: Re: Invasores del Espacio
Publicado por: t-spy en 23 de Octubre de 2009, 08:56:04 AM
CitarPor cierto, ¿sabeís si se puede distruibir gratuitamente un videojuego realizado con Visual C++ siendo este una versión TRIAL?

Las limitaciones en una versión TRIAL de un compilador suelen estar en sus funcionalidades (tiempo de prueba, opciones bloqueadas...), no en lo que puedes o no hacer con lo que has generado con él. De todas formas, no está de mas leerse bien la licencia por si acaso.

Para evitar problemas yo seguiría el consejo de [EX3]
Título: Re: Invasores del Espacio
Publicado por: alessandros en 23 de Octubre de 2009, 12:02:03 PM
Creo que debo unas respuestas  :):

1- Ya he encontrado el fallo del Release.... era simplemente que en un dbLoadImage, la ruta de la imagen estaba errónea por UNA sola letra que me faltaba. El Debug esta claro que si no encuentra la imagen sigue adelante, pero el Release no. Cosas de la vida....
Aún así, cuando ejecuto el ejecutable de la carpeta Release me salta un error de Windows diciendo que ha encontrado un error en Invasores del Espacio.exe y que tiene que cerrarlo. ¿Hay alguna forma especial para sacar el ejecutable para que yo lo pueda pasar a otros ordenadores y funcione en estos?

2- Tengo el Visual C++ Express Edition.... Juas  :P

Gracias por todos vuestros comentarios y ayuda ^^

Saludos!!
Título: Re: Invasores del Espacio
Publicado por: tamat en 23 de Octubre de 2009, 12:14:13 PM
será tema de rutas, al ejecutarlo desde el visual usa como carpeta base la carpeta donde está el proyecto, al ejecutarlo con el exe usa la del exe (release\)
Título: Re: Invasores del Espacio
Publicado por: alessandros en 23 de Octubre de 2009, 12:21:43 PM
Cita de: tamat en 23 de Octubre de 2009, 12:14:13 PM
será tema de rutas, al ejecutarlo desde el visual usa como carpeta base la carpeta donde está el proyecto, al ejecutarlo con el exe usa la del exe (release\)

Siento la ignorancia pero, ¿entonces dónde cambio la ruta?
Título: Re: Invasores del Espacio
Publicado por: alessandros en 23 de Octubre de 2009, 09:28:27 PM
Termino espero de una vez. Ya encontré lo del último fallo nada importante al fin y al cabo.

Os planteo una duda que tiene que surgir aqui de vez en cuando pero que no la encuentro. He pasado mi proyecto a otro ordenador y me faltan las librerias supuestamente del DirectX (dice que falta el archivo d3dx9_25.dll). ¿Cómo hago para instalarlas en el otro ordenador?

Muchas gracias por toda la ayuda :D
Título: Re: Invasores del Espacio
Publicado por: Hechelion en 24 de Octubre de 2009, 02:08:12 AM
Hay 2 formas, una, es copiar las DLL u OCX junto con el .exe, en ese caso no necesitas registrar ni nada, solo estar seguro que el archivo se encuentra en el mismo directorio que el ejecutable (Ojo, que esto no funciona con todas las librerías ).

La segunda es registrando la librería a mano, la copias por ejemplo en system32 y luego la registrar con "Regsvr32"

Regsvr32 [/u] [/s] <nombre del fichero>

Por ejemplo:
REGSVR32 c:\windows\system\Dao350.dll

[/u] - lo utilizamos cuando queremos "desregistrar" una DLL (o un .ocx en vez de registrarlo).

[/s] - modo "silencioso" - no despliega los mensajes durante la operación.

Lo que te recomiendo es que busques algún programa para empaquetar, ya que estos tienen la opción de instalar las DLL y te evitas hacer el proceso a mano, puedes buscar el programa "Create Install Free" el cual es bastante bueno y tiene una versión 100% funcional y gratuita, te recomendaría también el "SetupFactory" pero este último es de pago.
Título: Re: Invasores del Espacio
Publicado por: [EX3] en 24 de Octubre de 2009, 03:10:23 AM
Cita de: alessandros en 23 de Octubre de 2009, 09:28:27 PM
¿Cómo hago para instalarlas en el otro ordenador?
Como haces tu para jugar en tu ordenador a los juegos que usan DirectX? Pues instalando el paquete de instalacion de las runtime de DirectX ;)

CitarDirectX End-User Runtimes (August 2009)

This download provides the DirectX end-user redistributable that developers can include with their product.

http://www.microsoft.com/downloads/details.aspx?familyid=04AC064B-00D1-474E-B7B1-442D8712D553&displaylang=en

Con DirectX no me andaria con historias de instalaciones personalizadas por que seguro que a parte de las librerias van programas y configuraciones asociadas a esa libreria que te falta pero tendra dependencias de otras tantas mas (ojala fuera tan sencillo y simple como registrar el ActiveX dxvb8.dll de Visual Basic 6.0 :P). Se instala la ultima actualizacion de DirectX disponible y a jugar, asi te evitas andar instalando sublibrerias raras ni complicaciones similares. Lo mas que puedes hacer es incluir el redistribuible en la instalacion de tu juego y que se lance como opcional por el usuario, como hacen cantidad de juegos comerciales a la hora de instarse.

Salu2...
Título: Re: Invasores del Espacio
Publicado por: alessandros en 24 de Octubre de 2009, 11:58:29 AM
Cita de: Hechelion en 24 de Octubre de 2009, 02:08:12 AM
Hay 2 formas, una, es copiar las DLL u OCX junto con el .exe, en ese caso no necesitas registrar ni nada, solo estar seguro que el archivo se encuentra en el mismo directorio que el ejecutable (Ojo, que esto no funciona con todas las librerías ).

La segunda es registrando la librería a mano, la copias por ejemplo en system32 y luego la registrar con "Regsvr32"

Regsvr32 [/u] [/s] <nombre del fichero>

Por ejemplo:
REGSVR32 c:\windows\system\Dao350.dll

[/u] - lo utilizamos cuando queremos "desregistrar" una DLL (o un .ocx en vez de registrarlo).

[/s] - modo "silencioso" - no despliega los mensajes durante la operación.

Lo que te recomiendo es que busques algún programa para empaquetar, ya que estos tienen la opción de instalar las DLL y te evitas hacer el proceso a mano, puedes buscar el programa "Create Install Free" el cual es bastante bueno y tiene una versión 100% funcional y gratuita, te recomendaría también el "SetupFactory" pero este último es de pago.


Cita de: [EX3] en 24 de Octubre de 2009, 03:10:23 AM
Cita de: alessandros en 23 de Octubre de 2009, 09:28:27 PM
¿Cómo hago para instalarlas en el otro ordenador?
Como haces tu para jugar en tu ordenador a los juegos que usan DirectX? Pues instalando el paquete de instalacion de las runtime de DirectX ;)

CitarDirectX End-User Runtimes (August 2009)

This download provides the DirectX end-user redistributable that developers can include with their product.

http://www.microsoft.com/downloads/details.aspx?familyid=04AC064B-00D1-474E-B7B1-442D8712D553&displaylang=en

Con DirectX no me andaria con historias de instalaciones personalizadas por que seguro que a parte de las librerias van programas y configuraciones asociadas a esa libreria que te falta pero tendra dependencias de otras tantas mas (ojala fuera tan sencillo y simple como registrar el ActiveX dxvb8.dll de Visual Basic 6.0 :P). Se instala la ultima actualizacion de DirectX disponible y a jugar, asi te evitas andar instalando sublibrerias raras ni complicaciones similares. Lo mas que puedes hacer es incluir el redistribuible en la instalacion de tu juego y que se lance como opcional por el usuario, como hacen cantidad de juegos comerciales a la hora de instarse.

Salu2...




Muchas gracias a los dos ya tengo operativo el juego para todo el que lo quiera.  ^_^