Avances, Diario de...

Started by SplinterGU, April 17, 2008, 03:00:51 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

agrega un say de esto lvlMap y luego otro say de esto [lvlMap].fpg

antes del load_fpg

podes correrlo sin debug.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Splinter cuando llamas a la función 'sysproc_init' tanto en el compilador como interprete que haces realmente ? Estas creando algun objeto o que ? Porque esa funcion esta vacia pero veo que en el momento que se llama se crea la ventana SDL_app.

SplinterGU

esa funcion no esta vacia, es una de las funciones mas importantes... se encarga de cargar todos los modulos e inicializarlos, por eso, se crea la ventana del juego (si incluis el modulo de video).
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

#1803
Me puedes explicar un poco como funciona o de que funciones tira cuando se ejecuta, porque igual necesito pasar toda esa parte a C# y no se por donde cojer las orejas del gato, ya que usandola directamente tengo un problema de intento de escritura en memoria protegida.


Es que me siento un inutil lamer programando la verdad....

Tu dices que la función no esta vacia, pero yo miro el código en el fichero systub.c y sólo veo esto:

void sysproc_init( void )
{
}

O sea, ni con lupa veo nada ahí xD

SplinterGU

eso en el compilador, en el interprete tenes que mirar los fuentes de la bgdrtm...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Tienes razon, ha sido un problema al buscar con el notepad++, no he dado con la linea donde estaba la funcion en el interprete.

Una pregunta, la funcion esa se incluye directamente en el EXE del interprete o esta en la DLL
libbgdrtm.dll
?

Porque yo estaba usando la incluida en libgdrtm.dll, y si esta en el EXE no me queda otra que pasarla toda a C#

SplinterGU

esta en la dll...

como es el asunto? las dlls no las pasas?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

La idea es pasar solo lo minimo, de momento no paso ninguna.

Pues no deberia petar al usarla, la ventana se llega a crear pero peta despues...

Una pregunta, esa funcion utiliza alguna estructura inicializada antes ? Podria petar si la estoy llamando y esta usa estructuras que ya deberian tener valores antes de su llamada. En este caso tendria que pasar la funcion toda a C# ya que no podria pasarle estos valores internamente al llamarla.

SplinterGU

sinceramente no se, ni entiendo que estas haciendo...

bennugd no es un ejecutable, es una dll, bennugd es el bgdrtm.dll.

si no necesitas pasar ninguna dll, entonces no tenes mucho que hacer, solo llamar a la bgdrtm como lo hace el bgdi.c

disculpa, pero no entiendo que estas haciendo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Es eso que estoy haciendo, pero mi bgdi esta en c# y llama a modulos c++ de Bennu.
De momento es que chute, despues es cambiar la funcion de carga de modulos para que cargue tambien modulos de c#, pero en eso ya no tendré problemas. Lo que pasa es que no puedo debuggear modulos importados en otro lenguaje ajeno a .net, con lo cual la información de errores al usarlos es minima

FreeYourMind

Bueno, sólo para tu información, te puedo dar una explicación logica de porque no puedo usar la función de C en C# en este caso en particular.

Porque antes usas la funcion 'dcb_load' la que rellena la estrucuctura dcb que se guarda en memoria en tu aplicación C, la cual es despues de nuevo usada en 'sysproc_init', pues en C# tengo esta limitación, que no puedo acceder a la estrucutra dcb ya rellena en dcb_load, porque es interna a tu modulo, con lo cual all llamar sysproc_init esta estrucutra va tener valores null, por eso peta.

Es una limitación, si una funcion de un modulo externo rellena variables internas, estas como es lógico no se podran acceder externamente. Con lo cual no me queda otra que pasar ambas funciones a C# y rellenar mi propria estrucuctura dcb creada en C#

SplinterGU

estas confundido...

el ejecutable no llena ningun dcb, el dcb se llena en la bgdrtm, lo que pasa es que seguiste el fuente y no te fijaste como estaba organizado a nivel binario... y ahi esta tu problema...

el bgdi no hace nada, es una cascara que llama a las funciones de la dll... solo recoge los parametros y se los pasa a la dll.

el problema es que si pasas a C# las cosas, tenes que pasar todo, no le veo la gracia que tengas el bgdi en C# y el resto en dll C.

sino vas a tener que hacer algo para pasarme un area de memoria de un lenguaje a otro, pero me parece que te vas a complicar mucho.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Veo que no me has entendido.... Me da igual donde se llene en tu codigo C, tu tendrás siempre la estructura en memoria, y yo sencillamente no podré tenerla porque la operacion se hace en tu dll....

Enfin, que tampoco importa, ya me he currado esa parte en C# y ahora mismo ya estoy leyendo el dcb en C# y guardando los valores en la estructura...

SplinterGU

yo si te he entendido bien...

el dcb debe ser cargado en memoria del bgdrtm, porque sino el interprete no podra accederla, a menos que la hagas visible.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

@Splinter ¿Hay alguna razón práctica para que las SDL de mac se incluyan como <SDL/SDL.h> en lugar de SDL.h?

Es que me obligan a hacer alguna chapucilla con los proyectos de Xcode para iOS y todavía no me he cruzado con nada donde haga falta. sdl-config en OSX me devuelve:


imac:monolithic joseba$ sdl-config --cflags
-I/opt/local/include/SDL -D_GNU_SOURCE=1 -D_THREAD_SAFE