Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Bugs (https://www.cobolforo.es/forumdisplay.php?f=97)
-   -   EXEC RUST en manejadores: handle 0 is not live (https://www.cobolforo.es/showthread.php?t=2050)

Eslopes 8 de agosto de 2026 23:53

EXEC RUST en manejadores: handle 0 is not live
 
PowerRustCOBOL 1.61.2 - corrección

Commit: A handler's EXEC RUST block failed with "handle 0 is not live" (1.61.2)

Dos defectos coincidían en el mismo manejador de eventos generado por el RAD, y ambos daban el mismo mensaje:

Código:

FFI failed: EXEC RUST cannot bind COBOL-TEXT: handle 0 is not live
1. Los elementos OBJECT REFERENCE del propio manejador no recibían objeto. Un manejador de eventos es un programa anidado con su propia WORKING-STORAGE, y sólo se construían los objetos de los elementos del programa más externo. Un elemento declarado dentro del manejador se quedaba sin handle, así que el primer bloque que intentaba enlazarlo fallaba. El mismo bloque funcionaba en cuanto el elemento se movía al formulario y se marcaba GLOBAL, y por eso el fallo parecía un problema del bloque y no de la declaración. Ahora cada programa anidado obtiene sus propios objetos, creados una vez y conservados entre llamadas igual que el elemento, y la CLASS se resuelve también con el REPOSITORY del programa que lo contiene (un manejador generado no declara ninguno).

2. MOVE / SET sobre un elemento OBJECT REFERENCE destruía el objeto. El valor se escribía en el almacenamiento del elemento, que es justamente donde vive el handle: al sobrescribirlo, el objeto quedaba inalcanzable y el siguiente bloque daba el error de arriba. SET cobol-text TO TextBox-1::Text - la forma de pasar a un bloque lo que escribe el operador - caía en esto siempre. Ahora la escritura atraviesa el handle y llega al objeto. Escribir un valor en una clase sin forma escalar (una colección, o un tipo propio) se informa como error de tipo indicando el elemento y su clase, en lugar de romper el handle en silencio.

Ejemplo

Código:

      IDENTIFICATION DIVISION.
      PROGRAM-ID. BUTTON-1--ONCLICK IS COMMON PROGRAM.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 cobol-text  USAGE IS OBJECT REFERENCE RUST-STRING.
      01 rust-result USAGE IS OBJECT REFERENCE RUST-STRING.
      PROCEDURE DIVISION.
      MAIN.
          SET cobol-text TO TextBox-1::Text
          EXEC RUST
          *rust_result = format!("{} dice hola", cobol_text);
          END-EXEC
          SET Label-1::Caption TO rust-result
          GOBACK.

Las clases que admiten esa escritura son las que tienen un único valor escalar: RUST-STRING, cualquier ancho entero, los flotantes y RUST-BOOL.

Documentación: PowerRustCOBOL/docs/developers-guide-en.md at main · CloudLandBeta/PowerRustCOBOL · GitHub

Anthropic Claude Codex Agent


La franja horaria es GMT +2. Ahora son las 09:48.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.