extensión dctools

Started by DCelso, September 30, 2009, 02:46:31 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

splinter_work

aun no es posible... eso sera posible en una 1.5 o 2.0... pero no en una 1.0... por lo menos, no de momento...

DCelso

windgate, quizas si lo haces un poco rebuscado puedas ahorrarte el tener que pasar el código fuente de tus funciones hechas en bennu.
Me explico
1- creas tus funciones en bennu (Llamemosle "funciones BENNU")
2- creas los o el dcb correspondiente.
3- creas un dll en c en el que cargas el "dcb" y a cada "función BENNU" le asignas una funcion en código c (Llamemosle "funciones C"), ahora creas unas funciones  "wrapper" en C que sean las que usan la estructura necesaria para que pueda usarla Bennu, y estas dentro llamen a las "funciones C".

Mareas un poco la perdiz pero al final obtienes un dcb y dll que compondrán tu librería "binaria" sin códigos fuente de por medio :D.

Otra opción seria que splinter programara funciones en bennu que sean capaces de abrir "dcbs" y asignarlas a funciones nuevas de bennu. Algo así como Bennu embebido en Bennu :D. Te ahorrarías el .dll en diferencia al método anterior.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Suena bien DCelso... Entiendo lo que dices, con lo de las wrapper supongo que te refieres a esas cabeceras que hay siempre en los fuentes de las dll y tienen la misma forma y sirven para indicar como se llamaran desde Bennu.

Lo probare un dia de estos, ya consegui recompilar la libreria de redes de Sandman hace poco.

En cuanto a "cargar el dcb en C" eso ya me suena mas chungo :S ,¿A que te refieres exactamente?, ¿Cargar con include o como fichero con fopen?

Si es que con las dll estamos muchos de nosotros todavia locos :(
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

grisendo

¿Os funciona a todo el mundo? Yo lo estoy tomando de ejemplo para eliminar cosas
que me sobran y para intentar ver por qué me da error lo de las cadenas...
Compila bien y todo pero al ejecutar me da este error:

[code language="text"]
Assertion failed: code < string_allocated && code >= 0, file strings.c, line 264

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Presione una tecla para continuar . . .
[/code]

He visto por el foro que a alguien le pasó algo parecido, y se habla de que puede
ser versiones diferentes de Bennu, ¿Es cierto? ¿Cuál se necesita?

SplinterGU

no habras compilado con los fuentes del core directamente al .c?

hay que usar la bgdrtm.dll, no sus fuentes...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

grisendo

Pues yo creo que no... de todas formas para asegurarme he limpiado un montón de includes
y librerías que había pero que no se utilizaban (empezando desde cero y añadiendo poco a poco),
y me queda esto en mi proyecto:

Includes:
    + opencv
        - cv.h
        - cvver.h
        - cxcore.h
        - cxerror.h
        - cxtypes.h
        - highgui.h
        - cvtypes.h
        - cvcompat.h
    + bennu
        - bgdcore.h
        - bgddl.h
        - commons_defs.h
        - i_prcdef_st.h
        - instance.h
        - instance_st.h
        - sysprocs_st.h
        - typedef_st.h
        - xstrings.h
        + libgrbase
            - g_bitmap.h
            - g_blendop.h
            - g_clear.h
            - g_conversion.h
            - g_grlib.h
            - g_pal.h
            - g_region.h
            - libgrbase.h

Linkers:
    + opencv
        - cv.lib
        - cxcore.lib
        - highgui.lib
    + bennu
        - libbgdrtm.dll
        + libgrbase
            - libgrbase.dll
            - liblit.dll


Luego en el código incluyo (con #include) estos:
    - bgddl.h
    - libgrbase.h
    - cv.h
    - highgui.h
    - xstrings.h

No sé si es a lo que te referías...
Pero me sigue tirando error al ejecutar el jodido...

grisendo

#21
He mirado el código fuente de la función string_get(int code) y se comprueba
la condición que dice el error:
code < string_allocated && code >= 0

Vamos, que la función únicamente accede a un vector de 0 a string_allocated-1,
que contiene las cadenas del programa, y esa condición está para que no se salga de rango.

Así que he forzado code a 0 llamando a string_get(0) en lugar de string_get(params[0]),
con lo que se cumple que code es >= 0: entonces string_allocated debe ser <= 0.

Ahora, hay otra función por ahí llamada string_init(), que reserva memoria
y pone el valor de string_allocated a 4096, no? Pues la he llamado justo
antes del string_get() y ahora ya no tira el error (aunque evidentemente
la cadena que obtengo es basura).

¿Dónde y cuándo debería llamarse a esa funcion string_init()? Para mí que lo debería
hacer el propio intérprete, pero por alguna razón no lo hace... o si! porque justo antes
en bennu he llamado a un load_fpg() y a un say() y que usan funciones de string y
funcionan!! Vaya lío...

SplinterGU

nunca deberias llamar a la funcion string_init, a menos que seas el bgdi....

seguramente no estaras haciendo todos los string_discard o string_use correctos... o quizas no tienes bien declarados los argumentos de tu funcion nueva que has agregado...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Con el codigo quizas pueda ayudarte un poco mas...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

grisendo

Claro, sí... ahí va el código:

http://www.grisendo.com/subidas/codigo.rar

Yo es que ya no sé qué le pasa... desde que empecé
con esto me da ese error y no ha habido forma...
También he puesto el proyecto para Code::blocks
por si lo tenéis y veis que tengo alguna cosa mal
configurada del proyecto.

DCelso

A mi me pasó algo parecido al empezar a compilar.
Si no recuerdo mal es por usar un libbgdrtm.dll antiguo.

De todas formas, incluí un makefile para poder compilarlo con un entorno gcc cualquiera. El codigo fuente no necesita de códigos fuentes externos ni librería externas que no estén incluidos/as en el zip. simplemente haciendo "make all" en un entorno "gcc" debería generarse el .dll de mod_dctools.

O bien, mira otra cosa, el proyecto está para eclipse/cdt + mingw, así que te recomendaría que te crearas este entorno e intentaras compilarlo con éste, a ver si así no da el error, luego si ves que funciona, puedes ir examinando las propiedades del proyecto para ver que hay que poner en codeblocks para hacer lo mismo.
También, al compilar con eclipse verás en una ventana un log los comandos gcc ejecutados por éste, así que puedes copiartelos y examinarlos para ver que parámetros necesistas configurar en codeblocks para que ejecute los mismos comandos.

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

grisendo

Luego pruebo

De todas formas, karma++, porque gracias a esto ya he conseguido
quitar toda la furrufalla que tenía y no entendía de exports y cosas
así en mi librería :D

De todas formas, ¿Se pueden exportar tipos de datos y constantes?
Estaría bien a modo de ejemplo añadirle al ejemplo de DLL alguna
constante como pi o avogadro para aprender cómo se hace, y algún
tipo de dato sencillo tipo número complejo (todo esto si se puede,
claro)

Windgate

mod_scroll define un vector de estructuras GLOBAL, así que supongo que sí que se podrán exportar "variables".

En cuanto a tipos, Bennu3D exporta _pos3d _line3d y algunos más, no son más que estructuras, pero weno.

Personalmente no sabría hacerlo, pero estos ojitos lo han visto por ahí ::)
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

grisendo

Ok, le echaré un vistazo al código fuente de ambos. En algunos ejemplos
de DLL se llaman a instrucciones "raras" que tiene la palabra EXPORT y
pone cosas como GLOBAL y CONST y tal... cosas que no entendí en su
momento. Así que me imagino que sí que se puede.

He utilizado el Makefile para compilar el mod_dctools,
pero sigue pasando lo mismo (el mismo maldito error de siempre).
Las instrucciones han sido estas:

gcc  -DSTDC_HEADERS -I./includes -O3 -c -o mod_dctools.o mod_dctools.c
gcc -L./lib -shared -o mod_dctools.dll mod_dctools.o -lz -lbgdrtm

De todas formas en la segunda instrucción se intenta enlazar una librería
que no está en tu ZIP ni tenía yo en mi sistema. Me la he bajado (aunque
creo que no vale para nada, porque da lo mismo quitar el -lz del comando
sin tener el libz.dll que incluirlo)

El libbgdrtm.dll que uso para linkar y para ejecutar juegos bennu no sé qué
versión es (en las propiedades sale vacío) pero las fechas son:
Creado: miércoles, 29 de julio de 2009, 0:57:34
Modificado: domingo, 22 de noviembre de 2009, 4:16:43

Pues eso, que no hay forma! Ahora me bajaré Eclipse y miraré el proyecto
a ver...

grisendo

Ok, ya está (al menos el DCTools). Era cosa de versiones
de las DLL... Por lo visto tenía una orgía tremenda de
versiones distintas!!! He mandado todo a tomar por el
saco y me he bajado las últimas versiones :D y parece
que chuta! Ale, otra cosa menos ;) Gracias a todos!