@fastpho, corregido tu código
Tienes que poner:
Código COBOL:
01 TOOLINFO TYPEDEF.
05 CBSIZE PIC S9(9) COMP-5.
05 UFLAGS PIC S9(9) COMP-5.
05 HWND PIC S9(9) COMP-5.
05 UID PIC S9(9) COMP-5.
05 TLEFT PIC S9(9) COMP-5.
05 TTOP PIC S9(9) COMP-5.
05 TRIGHT PIC S9(9) COMP-5.
05 TBOTTON PIC S9(9) COMP-5.
05 HINST PIC S9(9) COMP-5.
05 LPSZTEXT POINTER *>PIC X(50). <-------------------------------------
05 LPARAM PIC S9(9) COMP-5.
01 TI TYPE TOOLINFO .
01 TEXTO-TOOLTIP PIC X(50). *> aqui es donde vamos a meter texto
Código COBOL:
*Cargo toolinfo
*
MOVE ZEROS TO ST-SIZE.
COMPUTE ST-SIZE = FUNCTION LENGTH(TI).
MOVE ST-SIZE TO CBSIZE OF TI.
MOVE 18 TO UFLAGS OF TI. *> TTF_CENTERTIP Or TTF_SUBCLASS
MOVE ST-CTRLHWND TO HWND OF TI.
MOVE HINSTANCE TO HINST OF TI.
MOVE 0 TO UID OF TI.
MOVE "PR" & X"00" TO TEXTO-TOOLTIP *> <-------------------------------
MOVE FUNCTION ADDR(TEXTO-TOOLTIP) TO LPSZTEXT OF TI. *> <-------------------------------
MOVE RLEFT TO TLEFT OF TI.
MOVE RTOP TO TTOP OF TI.
MOVE RRIGHT TO TRIGHT OF TI.
MOVE RBOTTON TO TBOTTON OF TI.
LPSZTEXT debe ser de tipo
POINTER porque no hay referencia explicita para pasarlo BY REFERENCE, así que estaba tomando los 50 bytes rompiendo completamente la estructura esperada, de ahí la violación de memoria.