FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour AppCrash Windows 7 al leer INI
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
AppCrash Windows 7 al leer INI
Posted: Tue Aug 23, 2022 08:34 PM
Hola,

Estoy complilando con la 煤ltima version de FWH, Harbour y VS2022

Al trabajar con un INI en Windows 7 o Windows Server 2008, la aplicaci贸n devuelve un AppCrash.
En Windows 10, 11 o Server de versi贸n superior, funciona sin problemas.

He probado con \Samples\TestIni.prg y tambi茅n casca.
En concreto casca en la primera llamada Get
Code (fw): Select all Collapse
GET cTitle  SECTION "main" ENTRY "Title"   OF oIni DEFAULT "FiveWin App"


el hbp que uso para construir el ejecutable es:
Code (fw): Select all Collapse
-gui

-Ic:\fwh\include

testini.prg

-Lc:\fwh\lib

-lFiveH32
-lFiveHC32

-lgdiplus
-lole32
-lOleDlg
-lversion

xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc

-ldflag=/NODEFAULTLIB:msvcrt


Code (fw): Select all Collapse
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86
c:\harbour\bin\hbmk2 sample.hbp -comp=msvc
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: AppCrash Windows 7 al leer INI
Posted: Wed Aug 24, 2022 06:34 AM

Fernando,

Por favor comprueba si se genera un fichero hb_out.log y copia el contenido aqui, gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: AppCrash Windows 7 al leer INI
Posted: Wed Aug 24, 2022 10:14 AM
Hola,

No genera el archivo hb_out.log

Casca en la lectura del primer valor
Code (fw): Select all Collapse
GET cTitle  SECTION "main" ENTRY "Title"   OF oIni DEFAULT "FiveWin App"
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: AppCrash Windows 7 al leer INI
Posted: Wed Aug 24, 2022 03:32 PM

Aparece algun error en pantalla o simplemente la aplicaci贸n termina ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: AppCrash Windows 7 al leer INI
Posted: Wed Aug 24, 2022 04:03 PM
Testini.exe dejo de funcionar

Code (fw): Select all Collapse
Firma con problemas:
  Nombre del evento de problema:    APPCRASH
  Nombre de la aplicaci贸n: testini.exe
  Versi贸n de la aplicaci贸n:   0.0.0.0
  Marca de tiempo de la aplicaci贸n:    630536c3
  Nombre del m贸dulo con errores:   testini.exe
  Versi贸n del m贸dulo con errores: 0.0.0.0
  Marca de tiempo del m贸dulo con errores:  630536c3
  C贸digo de excepci贸n:    c0000005
  Desplazamiento de excepci贸n: 00023249
  Versi贸n del sistema operativo:   6.1.7601.2.1.0.16.7
  Id. de configuraci贸n regional:   3082
  Informaci贸n adicional 1: a4a6
  Informaci贸n adicional 2: a4a6d662ea50490d5d34aa5042d56e97
  Informaci贸n adicional 3: 9aed
  Informaci贸n adicional 4: 9aede9b28b317395eb1236b114dab4e6

Lea nuestra declaraci贸n de privacidad en l铆nea:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0c0a

Si la declaraci贸n de privacidad en l铆nea no est谩 disponible, lea la declaraci贸n de privacidad sin conexi贸n:
  C:\Windows\system32\es-ES\erofflps.txt
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: AppCrash Windows 7 al leer INI
Posted: Wed Aug 24, 2022 04:07 PM
Hola,

Un error recursivo podria estar generando ese problema

Una solucion para detectar el problema es encerrar la operacion de la llamada a la funcion de lectura del ini con un estructura de control de errores y mostrar el error que da. Algo asi como

Code (fw): Select all Collapse
TRY 
聽 聽leerArchivoIni()
CATCH oErr
聽 聽msgInfo(oErr:Description)
END
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: AppCrash Windows 7 al leer INI
Posted: Wed Aug 24, 2022 07:45 PM
Hola,

Aun as铆 sigue apereciendo el appcrash y no muestra ning煤n mensaje de error

Code (fw): Select all Collapse
    TRY
           GET cTitle  SECTION "main" ENTRY "Title"   OF oIni DEFAULT "FiveWin App"
    CATCH oErr
       msgInfo(oErr:Description)
    END
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: AppCrash Windows 7 al leer INI
Posted: Wed Aug 24, 2022 11:11 PM

Fernando,

Por favor prueba a llamar la funci贸n del API de Windows directamente:

MsgInfo( GetPvProfString( cSection, cEntry, cValToChar( uDefault ), cIniFile ) )

y comprueba si sucede lo mismo. gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: AppCrash Windows 7 al leer INI
Posted: Thu Aug 25, 2022 08:04 AM
Code (fw): Select all Collapse
...
INI oIni FILE ".\MyApp.ini"
? 'a'
MsgInfo( GetPvProfString( "main", "Title", cValToChar( "FiveWin App" ), ".\MyApp.ini" ) )
? 'b'
GET cMsg    SECTION "main" ENTRY "Message" OF oIni DEFAULT "Main message"
...


No muestra ning煤n error adiccional.
Aparece el print a y luego sigue apareciendo el appcrash
No llega al print b
Code (fw): Select all Collapse
Firma con problemas:
  Nombre del evento de problema:    APPCRASH
  Nombre de la aplicaci贸n: testini.exe
  Versi贸n de la aplicaci贸n:   0.0.0.0
  Marca de tiempo de la aplicaci贸n:    63072c4d
  Nombre del m贸dulo con errores:   testini.exe
  Versi贸n del m贸dulo con errores: 0.0.0.0
  Marca de tiempo del m贸dulo con errores:  63072c4d
  C贸digo de excepci贸n:    c0000005
  Desplazamiento de excepci贸n: 00023bd9
  Versi贸n del sistema operativo:   6.1.7601.2.1.0.16.7
  Id. de configuraci贸n regional:   3082
  Informaci贸n adicional 1: a4a6
  Informaci贸n adicional 2: a4a6d662ea50490d5d34aa5042d56e97
  Informaci贸n adicional 3: cb90
  Informaci贸n adicional 4: cb909b3739f584694cfad667b5d174a5

Lea nuestra declaraci贸n de privacidad en l铆nea:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0c0a

Si la declaraci贸n de privacidad en l铆nea no est谩 disponible, lea la declaraci贸n de privacidad sin conexi贸n:
  C:\Windows\system32\es-ES\erofflps.txt
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: AppCrash Windows 7 al leer INI
Posted: Thu Aug 25, 2022 12:21 PM
Fernando,

Este es el c贸digo de la funci贸n GETPVPROFSTRING()

Puede ser un desbordamiento de pila por el tama帽o del buffer (16384). Prueba a poner cantidades mas peque帽as en el tama帽o del buffer hasta que desaparezca el crash :-)

Renombra la funci贸n para que puedas probarla facilmente sin tener que modificar las librerias de FWH

Code (fw): Select all Collapse
#ifdef __HARBOUR__
   HB_FUNC( GETPVPROFSTRING )
#else
   HB_FUNC( GETPVPROFS )
#endif
{
   BYTE bBuffer[ 16384 ];
   WORD wLen;

   wLen = GetPrivateProfileString( hb_parc( 1 ),     // Section
                                   IF( HB_ISCHAR( 2 ), hb_parc( 2 ), 0 ),   // Entry
                                   hb_parc( 3 ),     // Default
                                   ( char * ) bBuffer,        // Destination Buffer
                                   sizeof( bBuffer ) - 1,   // M聽x Len
                                   hb_parc( 4 ) );   // INI File
   if( wLen )
      hb_retclen( ( char * ) bBuffer, wLen );
   else
      hb_retc( "" );
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: AppCrash Windows 7 al leer INI
Posted: Thu Aug 25, 2022 03:07 PM
Code (fw): Select all Collapse
    // MENU PRINCIPAL

    // Para Carregar a Ultima Tela Salva no Arquivo .INI chamar FundoWnd()
    IF FILE( "FUNDO.INI" )
       FUNDOWND() // Chamada ao fundo de tela Escolhida Pelo Usu聽rio. Muito Bom.
    ELSE
       NOME_ARQ := FCREATE("FUNDO.INI")

       NREGISTRO := "[MAIN]"                                                  ;
                    + CRLF                                    +               ;
                    "Tipo=1"                                  +               ;
                    + CRLF                                    +               ;
                    "Style=BRICKS"                            +               ;
                    + CRLF                                    +               ;
                    "Cor=32768"                               +               ;
                    + CRLF                                    +               ;
                    "File=.\ARANHA.BMP"                       +               ;
                    + CRLF+CRLF                               +               ;
                    "[LOGO]"                                  +               ;
                    + CRLF                                    +               ;
                    "File=.\Logo.bmp"                         +               ;
                    + CRLF                                    +               ;
                    "Row=10"                                  +               ;
                    + CRLF                                    +               ;
                    "Col=10"                                  +               ;
                    + CRLF+CRLF                               +               ;
                    "[THANKS]"                                +               ;
                    + CRLF                                    +               ;
                    "Special Thanks = "+"Ednaldo Rolim"                      +;
                    + CRLF                                                   +;
                    "Propriet聽rio.. = "+"Jo脝o <!-- e --><a href="mailto:Santos-kapiabafwh@gmail.com.br">Santos-kapiabafwh@gmail.com.br</a><!-- e -->"+;
                    + CRLF                                    +               ;
                    "Meu Site:..... = "+"Visite: <!-- w --><a class="postlink" href="http://www.pleno.com.br">www.pleno.com.br</a><!-- w -->"           +;
                    + CRLF+CRLF                                              +;
                    "Autor......... = "+"Jo脝o Santos - <!-- e --><a href="mailto:kapiabafwh@gmail.com.br">kapiabafwh@gmail.com.br</a><!-- e -->"

       FWRITE( NOME_ARQ, NREGISTRO )
       FCLOSE( NOME_ARQ )

       FUNDOWND() // Chamada ao fundo de tela Escolhida Pelo Usu聽rio. Muito Bom.

    ENDIF
 
    // Enviado Por Ednaldo Rolim, Para Colocar o Logo em 23/11/2002
    // nheight() = Pra Cima Pra Baixo       = -235
    // nWidth()  = Pra Esquerda Pra Direita = -410

    WndCenter( oWndMain:hWnd )

    ACTIVATE WIN...


FUNCTION FundoWnd( nOption, oWin, cWStyle, nWCor )

    LOCAL oIni, oBrush, oBmp
    LOCAL nTipo, cStyle, nCor, cFile, cLogo, nRow, nCol, lSelect
    LOCAL cDiretor := GetPvProfString( "Settings", "SaveDir", FilePath(), ".\FUNDO.INI" )
    LOCAL cMascara := "*.BMP", oImage
    LOCAL Nome_Arq, nRegistro, oDlg, cMsg, cTexto
    LOCAL nResHoriz, nResVert

    DEFAULT nOption := 0, oWin := oWndMain:oWndClient

    IF nOption < 0 .AND. nOption > 4
       RETURN NIL
    ENDIF

    INI oIni FILE ".\Fundo.ini"
        GET nTipo    SECTION "MAIN" ENTRY "Tipo"  OF oIni DEFAULT 1
        GET cStyle   SECTION "MAIN" ENTRY "Style" OF oIni DEFAULT "Bricks"
        GET nCor     SECTION "MAIN" ENTRY "Cor"   OF oIni DEFAULT  nRGB(   0,   0, 255 )
        GET cFile    SECTION "MAIN" ENTRY "File"  OF oIni DEFAULT ".\Aranha.bmp"

        GET cLogo    SECTION "LOGO" ENTRY "File"  OF oIni DEFAULT ".\Logo.bmp"
        GET nRow     SECTION "LOGO" ENTRY "Row"   OF oIni DEFAULT 10
        GET nCol     SECTION "LOGO" ENTRY "Col"   OF oIni DEFAULT 10
    ENDINI

    IF nOption == 0

        lSelect := .F.

     ELSEIF nOption == 1  // Vem do Menu Principal, troca a BMP

        nTipo   := 1
        lSelect := .T.

     ELSEIF nOption == 2

        cStyle  := cWStyle
        nTipo   := 2
        lSelect := .F.

     ELSEIF nOption == 3

        nCor    := nWCor
        nTipo   := 3
        lSelect := .F.

     ELSEIF nOption == 4

        nTipo   := 3
        lSelect := .T.

    ENDIF

    //---- Cria o Brush
    //
    IF nTipo == 1

        IF lSelect // No Windows 7, precisa estar como administrador senao...

           //cFile := SubStr( cGetFile( "*.BMP", "Selecione o Arquivo Bitmap (.BMP)" ), 1 )

           cFile := SubStr( cGetFile( "*.BMP", "Selecione o Arquivo Bitmap (.BMP)" ), 3 )

        ENDIF

        IF Empty( cFile )
           Return Nil
        ENDIF

        // DEFINE BRUSH oBrush FILE cFile

        //SET BRUSH OF oWin TO oBrush // Modificado em: 20/04/2011

        nResHoriz := oWndMain:nHorzRes() // retorna a resolucao horizontal
        nResVert  :=  oWndMain:nVertRes() // retorna a resolucao vertical

        IF nResHoriz     = 1440 .AND. nResVert = 900

           @ 0, 0 IMAGE oImage SIZE 1440, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz     = 1366 .AND. nResVert = 768

           @ 0, 0 IMAGE oImage SIZE 1366, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz     = 1360 .AND. nResVert = 768

           @ 0, 0 IMAGE oImage SIZE 1360, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz = 1280 .AND. nResVert = 768

           @ 0, 0 IMAGE oImage SIZE 1280, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz = 1280 .AND. nResVert = 720

           @ 0, 0 IMAGE oImage SIZE 1280, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )


        ELSEIF nResHoriz = 1280 .AND. nResVert = 960

           @ 0, 0 IMAGE oImage SIZE 1280, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz = 1280 .AND. nResVert = 800

           @ 0, 0 IMAGE oImage SIZE 1280, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz = 1280 .AND. nResVert = 720

           @ 0, 0 IMAGE oImage SIZE 1280, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz = 1280 .AND. nResVert = 600

           @ 0, 0 IMAGE oImage SIZE 1280, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz = 1600 .AND. nResVert = 1200

           @ 0, 0 IMAGE oImage SIZE 1600, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz = 1680 .AND. nResVert = 1050

           @ 0, 0 IMAGE oImage SIZE 1680, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz = 2560 .AND. nResVert = 1600

           @ 0, 0 IMAGE oImage SIZE 2560, 668 OF oWin ADJUST
           oImage:Progress( .F. )
           oImage:LoadBmp( cFile )

        ELSEIF nResHoriz = 1024 .AND. nResVert = 768

           IF ISWINXP()

              @ 0, 0 IMAGE oImage SIZE 1024,668 OF oWin ADJUST
              oImage:Progress( .F. )
              oImage:LoadBmp( cFile )

           ELSE

              @ 0, 0 IMAGE oImage SIZE 1024,678 OF oWin ADJUST
              oImage:Progress( .F. )
              oImage:LoadBmp( cFile )

           ENDIF

        ELSE

           IF ISWINXP()

              @ 0, 0 IMAGE oImage SIZE 800,500 OF oWin ADJUST
              oImage:Progress( .F. )
              oImage:LoadBmp( cFile )

            ELSE

              @ 0, 0 IMAGE oImage SIZE 800,510 OF oWin ADJUST
              oImage:Progress( .F. )
              oImage:LoadBmp( cFile )

           ENDIF

        ENDIF

     ELSEIF nTipo == 2

        DEFINE BRUSH oBrush STYLE ( cStyle )

     ELSEIF nTipo == 3

        IF lSelect
           nCor := ChooseColor()
        ENDIF

        DEFINE BRUSH oBrush COLOR nCor

    ENDIF

    //---- Estabelece o Brush da Janela
    //
    IF nTipo != 1

       SET BRUSH OF oWin TO oBrush

    ENDIF

    IF nOption != 0

        // Grava no Arquivo INI as Modifica鈥∶s
        INI oIni FILE ".\Fundo.ini"

            SET SECTION "MAIN" ENTRY "Tipo"  OF oIni TO nTipo
            SET SECTION "MAIN" ENTRY "Style" OF oIni TO cStyle
            SET SECTION "MAIN" ENTRY "Cor"   OF oIni TO nCor
            SET SECTION "MAIN" ENTRY "File"  OF oIni TO cFile

            SET SECTION "LOGO" ENTRY "File"  OF oIni TO cLogo
            SET SECTION "LOGO" ENTRY "Row"   OF oIni TO nRow
            SET SECTION "LOGO" ENTRY "Col"   OF oIni TO nCol

            SET SECTION "THANKS" ENTRY "Special Thanks" ;
                OF oIni TO "Ednaldo Rolim - <!-- e --><a href="mailto:ednaldorolim@uol.com.br">ednaldorolim@uol.com.br</a><!-- e --> - My Friend"
            SET SECTION "THANKS" ENTRY "Autor..." ;
                OF oIni TO "Jo脝o Santos   - <!-- e --><a href="mailto:kapiabafwh@gmail.com.br">kapiabafwh@gmail.com.br</a><!-- e -->"
            SET SECTION "THANKS" ENTRY "Meu Site:....." ;
                OF oIni TO "Visite: <!-- w --><a class="postlink" href="http://www.pleno.com.br">www.pleno.com.br</a><!-- w -->"

        ENDINI

        // REINICIAR O PROGRAMA PARA ASSUMIR A NOVA TELA DE FUNDO

        IF nOption == 1

           MsgInfo( OemToAnsi( "Aten鈥∶唎 Usu聽rio:             " )+CRLF+  ;
                    OemToAnsi( "PRECISO REINICIAR O PROGRAMA " )+CRLF+  ;
                    OemToAnsi( "Tecle <ENTER> Para Continuar " ),       ;
                    OemToAnsi( "Tecle <Enter> Para Finalizar " ) )

           MsgRun( "Desligando o Programa...           ", ;
                   "Por Favor, Espere!                 ", ;
                   { | oDlg | ( DESLIGA_VENDAS( oDlg ) ) } )

           AEVAL(DIRECTORY( "VENDAS.BAT"     ),{ |aFILE| FERASE(aFILE[F_NAME]) } )

           IF .NOT. FILE( "VENDAS.BAT" )

              NOME_ARQ := FCREATE("VENDAS.BAT")

              NREGISTRO := "@ECHO OFF"                                       ;
                           + CRLF        +                                   ;
                           "CLS"         +                                   ;
                           + CRLF + CRLF +                                   ;
                           "VENDAS.EXE"  +                                   ;
                           + CRLF + CRLF +                                   ;
                           "CLS"         +                                   ;
                           + CRLF        +                                   ;
                           "EXIT"

              FWRITE( NOME_ARQ, NREGISTRO )
              FCLOSE( NOME_ARQ )

           ENDIF

           DbCloseAll()

           WinExec( "VENDAS.BAT", 0 )

           __Quit()

        ENDIF

    ENDIF

RETURN NIL


Regards, saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: AppCrash Windows 7 al leer INI
Posted: Fri Aug 26, 2022 08:49 AM
Hola,

S贸lo con incluir esta funci贸n en el c贸digo fuente, ya funciona sin problemas.
No he tenido que cambiar el buffer

Code (fw): Select all Collapse
#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

#define IF(x,y,z) ((x)?(y):(z))
聽 聽 
聽 聽#ifdef __HARBOUR__
聽 聽 聽 聽HB_FUNC( GETPVPROFSTRING )
聽 聽 #else
聽 聽 聽 聽HB_FUNC( GETPVPROFS )
聽 聽 #endif
聽 聽 {
聽 聽 聽 聽BYTE bBuffer[ 16384 ];
聽 聽 聽 聽WORD wLen;

聽 聽 聽 聽wLen = GetPrivateProfileString( hb_parc( 1 ), 聽 聽 // Section
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽IF( HB_ISCHAR( 2 ), hb_parc( 2 ), 0 ), 聽 // Entry
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽hb_parc( 3 ), 聽 聽 // Default
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽( char * ) bBuffer, 聽 聽 聽 聽// Destination Buffer
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽sizeof( bBuffer ) - 1, 聽 // M x Len
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽hb_parc( 4 ) ); 聽 // INI File
聽 聽 聽 聽if( wLen )
聽 聽 聽 聽 聽 hb_retclen( ( char * ) bBuffer, wLen );
聽 聽 聽 聽else
聽 聽 聽 聽 聽 hb_retc( "" );
聽 聽 }

#pragma ENDDUMP
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos

Continue the discussion