Hola Javier, Te has explicado perfectamente, y me has hecho recordar que alguna vez me habian pasado problemas similares y los habia arreglado rellenando a blancos la variable antes, en el caso de un comando no lo puedo hacer, por tanto MUCHAS GRACIAS por tu informacion, siempre hay algo que aprender cada dia.
Un Saludo Martí Riera 2009/5/25 Javier Mora <[email protected]> > Hola Marti: > > Este comportamiento es así porque OS/400 así lo quiere. Me explico. Si en > un CL se define un parámetro de 30 o menos de 30, no es necesario pasar una > variable de ese tamaño. Sin embargo si es mayor que 30 sí. ¿Por qué? No lo > sé. Lo que si sé es que, tanto en CL como en RPG, los parámetros se pasan > todos por referencia, es decir, se pasa la dirección de memoria de los > datos. Si el programa espera 256 bytes en el parámetro y sólo utilizamos los > 10 primeros, el CL no lo sabe y sigue tomando los 246 restantes sin > preguntarse si esa porción de la memoria corresponde o no al parámetro > pasado. En definitiva, en el programa se observa "basura" en el valor de la > variable. > > Este funcionamiento que tiene CL con los parámetros no sé si se reproduce > para los programas RPG. Yo creo que sí, pero puedo estar equivocado. > > Espero haberme explicado bien. > > Javier Mora > > ------------------------------ > *De:* [email protected] [mailto: > [email protected]] *En nombre de *Marti Riera > *Enviado el:* sábado, 23 de mayo de 2009 16:27 > > *Para:* forum.help400 > *Asunto:* Re: Mandato RTVENVVAR > > Hola Javier, > > Pos zi, funciona con 30, pero lo que no entiendo porque no funciona con 256 > que el el valor maximo que esta definido en el RGLE: > envvar 256A > > Si hacemos un dump cuando falla veremos que la variable &ENVAR que recibe, > si es de long. 256, contiene cerros a partir de la posicion 33 (ver imagen) > y supongo que eso es lo que me hace fallar el programa. > > A mi ya me sirve tu solucion ya que yo solo voy un string y no una variable > cpara pasarle el paramentro, pero entiendo que es mejor limitar al maximo la > variable que se le envia. > > Gracias y Saludos > > Martí Riera > > > 2009/5/21 Javier Mora <[email protected]> > >> Hola de nuevo: >> >> Efectivamente, el problema está en tu CL. Fíjate que el parámetro lo >> defines de 256, lo que te obliga a pasar una variable de 256 bytes. >> >> He cambiado el programa y he dejado el parámetro en 30 bytes y ¡funciona!. >> Cuando el parámetro es menor o igual de 30 bytes el sistema no te obliga a >> pasar los 30 bytes. >> >> No sé si me he explicado bien. >> >> Un saludo. >> >> Javier Mora >> >> ------------------------------ >> *De:* [email protected] [mailto: >> [email protected]] *En nombre de *Marti Riera >> *Enviado el:* jueves, 21 de mayo de 2009 17:50 >> *Para:* forum.help400 >> *Asunto:* Re: Mandato RTVENVVAR >> >> Alex, Javier, >> >> Gracias por la informacion. >> >> Javier: El codigo que me has enviado lo tenemos igual, bueno lo revisare >> con lupa. >> >> De momento ya he descubierto algo, el programa de test que habia enviado >> estaba simplificado, he probado ese programa y tambien me funciona. Ahora os >> envio el que no me funciona, es casi igual pero... >> PGM PARM(&ENVVAR) >> DCL VAR(&ENVVAR) TYPE(*CHAR) LEN(256) >> DCL VAR(&VALUE) TYPE(*CHAR) LEN(4096) >> RTVENVVAR ENVVAR(&ENVVAR) RTNVAL(&VALUE) >> SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA(&VALUE) >> ENDPGM >> Con lo cual ya intuyo cual es el problema el paso de parametros entre el >> CL de prueba y el comando, ya que si pongo el nombre de la variable >> "hardcode" si funciona. >> >> Bueno mañana le doy la vuelta definitiva y os digo. >> >> Saludos >> >> Martí Riera >> >> >> 2009/5/21 Javier Mora <[email protected]> >> >>> Hola Martí: >>> >>> Yo al probar esta utilidad también me encontré con problemas parecidos, >>> pero creo recordar que estaban relacionados con variables de entorno del >>> trabajo o del sistema. Rebuscando encontré el problema y los fuentes que >>> solucionaban ese bug. >>> >>> Te los envío. He probado tu ejemplo y funciona. Dime si se siguen >>> reproduciendo los problemas en tu caso. >>> >>> Un saludo. >>> >>> Javier Mora >>> >>> ------------------------------ >>> *De:* [email protected] [mailto: >>> [email protected]] *En nombre de *Marti Riera >>> *Enviado el:* jueves, 21 de mayo de 2009 14:04 >>> *Para:* Forum.Help400 >>> *Asunto:* Mandato RTVENVVAR >>> >>> Hola, >>> >>> Llevo un dia un poco espeso intentando hacer funcionar este comando >>> bajado de la web: >>> http://code.midrange.com/759f4f422d.html >>> >>> Hay una explicacion mas larga en: >>> http://www.mcpressonline.com/programming/rpg/what-is-the-environment.html >>> >>> Lo que trato de hacer es recuperar facilmente una variable de entorno >>> dentro de un programa CL. >>> Ya os digo que el dia que dieron RPG ILE no fui, ja, ja !! >>> >>> Curiosamente he hecho un programa de test par aprobarlo y si lo ejecuto >>> tal cual no funciona no devuelve nada: >>> PGM >>> DCL VAR(&VALUE) TYPE(*CHAR) LEN(4096) >>> RTVENVVAR ENVVAR('LANG') RTNVAL(&VALUE) >>> SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA(&VALUE) >>> ENDPGM >>> Pero si ejecuto un strisdb del programa rpg a partir de ese momento si >>> devuelve el valor, por ejemplo de LANG que es por omision en todos los >>> sistemas: >>> /QSYS.LIB/EN_US.LOCALE. >>> Podeis ver la variables de entorno con WRKENVVAR. >>> >>> Alguna pista de que estoy haciendo mal? >>> >>> Gracias y saludos >>> >>> Martí Riera >>> >>> __________________________________________________ >>> Forum.HELP400 es un servicio m&#225;s de ServerNEWS. >>> &#169; Publicaciones Help400, S.L. - Todos los derechos reservados >>> http://www.help400.es >>> _____________________________________________________ >>> >>> Para darte de baja visita la siguente URL: >>> http://listas.combios.es/mailman/listinfo/forum.help400 >>> >> >> >> __________________________________________________ >> Forum.HELP400 es un servicio m&#225;s de ServerNEWS. >> &#169; Publicaciones Help400, S.L. - Todos los derechos reservados >> http://www.help400.es >> _____________________________________________________ >> >> Para darte de baja visita la siguente URL: >> http://listas.combios.es/mailman/listinfo/forum.help400 >> > > > __________________________________________________ > Forum.HELP400 es un servicio m&#225;s de ServerNEWS. > &#169; Publicaciones Help400, S.L. - Todos los derechos reservados > http://www.help400.es > _____________________________________________________ > > Para darte de baja visita la siguente URL: > http://listas.combios.es/mailman/listinfo/forum.help400 >
__________________________________________________ Forum.HELP400 es un servicio m&#225;s de ServerNEWS. &#169; Publicaciones Help400, S.L. - Todos los derechos reservados http://www.help400.es _____________________________________________________ Para darte de baja visita la siguente URL: http://listas.combios.es/mailman/listinfo/forum.help400

