Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Prg on January 04, 2011, 11:18:46 PM

Title: problemas con mi dcl
Post by: Prg on January 04, 2011, 11:18:46 PM
Hola, todo iba genial hasta que llegué al uso de una función que retorna una cadena. cómo y dónde se hará la declaración de esta función para que la función retorne correctamente el tipo?
Title: Re: problemas con mi dcl
Post by: SplinterGU on January 04, 2011, 11:39:30 PM
Los dlc tienen autodeclaracion de funciones, al cargarse primero no hace falta declarar las funciones, pero si tu dcl va a usar una funcion que esta definida en otro dcl o en el programa principal, entonces si debe declararse, pero solo en el dlc.

lo que no se puede hacer (por ahora) es declarar una funcion que existe en un dcl en el programa principal, ya que las funciones se declaran al linkear contra el dcl que las contiene.

no se si quedo claro, si necesitas que lo explique de otra forma, pedilo.

saludos.
Title: Re: problemas con mi dcl
Post by: Prg on January 05, 2011, 12:14:52 AM
ok, creo que entendí, pero eso no me está sucediendo

[code language="bennu"]import "mod_key";
import "mod_video";
import "mod_text";
import "mod_proc";
import "mod_grproc";
import "mod_say";
import "mod_scroll";
import "mod_map";
import "mod_screen";
import "mod_mouse";
import "mod_draw";
import "mod_mem";
import "mod_string";

begin
say(am());
say("antes mouse.left");
while (not mouse.left)
frame;
end
say("despu[es mouse.left");
say(dg());

say("___________");

say(dgh());

end

function dgh()
begin
while (mouse.left)
frame;
end
say("paso");
return(45);
end[/code]

[code language="bennu"]import "mod_key";
import "mod_video";
import "mod_text";
import "mod_proc";
import "mod_grproc";
import "mod_say";
import "mod_scroll";
import "mod_map";
import "mod_screen";
import "mod_mouse";
import "mod_draw";
import "mod_mem";
import "mod_string";

function string am()
begin
return("sd");
end
declare function int dg()
end

function int dg()
begin
while (mouse.left)
frame;
end
say("paso");
return(45);
end[/code]





Quote> Executing: C:\Program Files (x86)\ConTEXT\ConExec.exe "bgdi" programa

28
antes mouse.left
despu[es mouse.left
65538
___________
paso
paso
45
> Execution finished.

la función am debería retornar una cadena que say imprimiría como "sd", la función dg se comporta como un proceso por tener un frame, pero debería ser función.

la otra función se pone como ejemplo del comportamiento que esperaba.

espero no meter la pata. je je... saludos
Title: Re: problemas con mi dcl
Post by: SplinterGU on January 05, 2011, 12:38:57 AM
es correcto, lo incorpora como proceso, cuando debe ser funcion...

vamos a ver como lo soluciono...

gracias.
Title: Re: problemas con mi dcl
Post by: SplinterGU on January 05, 2011, 12:46:34 AM
ya lo solucione!

muchas gracias por el reporte... ya mismo armo binarios y subo fix!

gracias y karma!
Title: Re: problemas con mi dcl
Post by: SplinterGU on January 05, 2011, 01:16:19 AM
podrias probarlo y comentarme como te va?

gracias!
Title: Re: problemas con mi dcl
Post by: Prg on January 05, 2011, 02:03:46 AM
Quote from: SplinterGU on January 05, 2011, 01:16:19 AM
podrias probarlo y comentarme como te va?

gracias!
claro, lo pruebo y te digo
:)
Title: Re: problemas con mi dcl
Post by: Prg on January 05, 2011, 02:10:46 AM
Funciona muy bien, gracias.

Por lo pronto para lo de las cadenas usaré un puntero en lugar de retornarla.

saludos y muchas gracias por tu ayuda amigo. karma++
Title: Re: problemas con mi dcl
Post by: SplinterGU on January 05, 2011, 02:20:07 AM
me alegro que funcione.

punteros a cadenas no es bueno...

podrias poner punteros a un array de chars.
Title: Re: problemas con mi dcl
Post by: Prg on January 05, 2011, 02:36:07 AM
También puedo definirlas en el .h y retornar la cadena como lo hacía antes. Eso sí funciona.

Eso no genera problemas? 
Title: Re: problemas con mi dcl
Post by: SplinterGU on January 05, 2011, 03:20:01 AM
Quote from: Prg on January 05, 2011, 02:36:07 AM
También puedo definirlas en el .h y retornar la cadena como lo hacía antes. Eso sí funciona.

Eso no genera problemas? 


ejemplo?
Title: Re: problemas con mi dcl
Post by: Prg on January 05, 2011, 04:11:10 AM
tengo en el .h

[code language="bennu"]function string gui_CopiaTS(p)
private
   gui_texto a;
   gui_areaTexto b;
begin
   a=b=p;
   if (p_tipo(p) == type gui_texto)
      return(a.Tselect);
   elseif(p_tipo(p) == type gui_areaTexto)
      return(b.Tselect);
   end
end[/code]

y en el código tengo:

[code language="bennu"]if (boton==1 and not mouse.left)
      copiado=gui_CopiaTS(idTexto);
      boton=0;
   end[/code]
donde copiado es una cadena

gracias nuevamente

Ya he acomodado todos los test de gui_so para usar el dcl y todo funciona de maravilla. está genial  :)   ;D
Title: Re: problemas con mi dcl
Post by: SplinterGU on January 05, 2011, 04:28:14 AM
ah, no, eso no es necesario meterlo en el .h, es mas recomiendo que no lo hagas y lo metas en el dcl.
Title: Re: problemas con mi dcl
Post by: Prg on January 05, 2011, 04:36:27 AM
Quote from: SplinterGU on January 05, 2011, 04:28:14 AM
ah, no, eso no es necesario meterlo en el .h, es mas recomiendo que no lo hagas y lo metas en el dcl.

perdón, cuando decía que estaba en el código me refería el programa que usa el dcl.

Estas lineas
[code language="bennu"]if (boton==1 and not mouse.left)
  copiado=gui_CopiaTS(idTexto);
  boton=0;
end[/code]

están en el programa que usa el dcl,


Mientras que la función de abajo la puse en el .h para que si retorne el string.
[code language="bennu"]function string gui_CopiaTS(p)
private
gui_texto a;
gui_areaTexto b;
begin
a=b=p;
if (p_tipo(p) == type gui_texto)
return(a.Tselect);
elseif(p_tipo(p) == type gui_areaTexto)
return(b.Tselect);
end
end[/code]

bueno, habiendo aclarado esto, me gustaría ver que opinas nuevamente. perdón por tanta pregunta.

saludos y gracias.
Title: Re: problemas con mi dcl
Post by: SplinterGU on January 05, 2011, 05:03:06 AM
si, habia entendido bien, pero no me explique.

yo decia que no pongas ese codigo en el .h, que lo pongas en el dcl.
Title: Re: problemas con mi dcl
Post by: Prg on January 05, 2011, 05:18:24 AM
entendido. gracias y saludos  ;D