FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index Bugs report & fixes / Informe de errores y arreglos Ajuste para samples\insptest.prg
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Ajuste para samples\insptest.prg
Posted: Wed Sep 14, 2011 07:53 AM
Tratando de probar el inspector de objetos genérico, me arrojaba un error diciendo que la función __CLASSINS no existía. Claro, ahora en Harbour la función se llama __CLASSINSTANCE.
Eso se corrige añadiendo

Code (fw): Select all Collapse
     #ifdef __HARBOUR__
         #define __CLASSINS __CLASSINSTANCE
     #endif


para que cambie el nombre de la función si corresponde. No sé si corresponde aplicar el renombrado con xHarbour, pero sería fácil chequearlo con el mismo método.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Ajuste para samples\insptest.prg
Posted: Wed Sep 14, 2011 08:41 AM
Otro detalle corregido:

en el método New_, en el bucle que determina las variables de instancia (DATAS), si las datas no son públicas el programa falla y no se recupera del error.

Modifiqué el bucle encerrando la llamada al oSend() en un Begin/Secuence

Code (fw): Select all Collapse
     /* Enclose in a custom ErrorBlock to catch OOP Errors */
        // bError:= ERRORBLOCK( {|oError| ::Error( oError )} )
        bError:= ERRORBLOCK( {|oError| Break( oError )} )  // cambio el manejador. 
        BEGIN SEQUENCE

        FOR cx = 1 TO nLen

         /* ignore strings with a leading Underscore */
          IF !( StrChar( aDict[cx], 1) == '_')
            /* Method */
             IF ASCAN( aDict, LEFT( "_" + aDict[cx], 10 ) ) == 0
                AADD( aMeth, { aDict[cx] } )

            /* Var */
             ELSE
                BEGIN SEQUENCE                              // <--- desde acá
                  uData = OSend( oClient, aDict[cx] )
                RECOVER USING oError
                  uData = NIL
                END SEQUENCE                                 // <--- hasta acá

                AADD ( aIvar, { VALTYPE( uData ), aDict[cx], ::Val2Char( uData )})

             ENDIF


           ENDIF
        NEXT
        RECOVER USING oError
           eval( bError, oError )

        END SEQUENCE
        ERRORBLOCK( bError )


Si bien al producirse un error pone como valor de la DATA en NIL y no es muy elegante, al menos permite acceder y ver el resto de los componentes.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ajuste para samples\insptest.prg
Posted: Wed Sep 14, 2011 06:54 PM

Carlos,

Gracias! :-)

El problema ahora es que recientemente hemos añadido unas DATAs PROTECTED a la Clase TWindow y parece que no se puede recuperar ese error. Habria que ver la forma de detectar si una DATA es PROTECTED antes de intentar acceder a ella...

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ajuste para samples\insptest.prg
Posted: Wed Sep 14, 2011 07:23 PM

Existe la función __CLSMSGTYPE( oObject:ClassH, cMsgName ), pero necesitariamos __CLSMSGSCOPE( oObject:ClassH, cMsgName )

No es dificil de implementar, vamos a probar... :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Ajuste para samples\insptest.prg
Posted: Wed Sep 14, 2011 09:06 PM
Implementada y reportada al grupo de desarrollo de Harbour para que si la encuentran util la incluyan en el próximo build de Harbour:

http://groups.google.com/group/harbour-devel/browse_thread/thread/6175d1ca3a54047d#
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Ajuste para samples\insptest.prg
Posted: Thu Sep 15, 2011 06:41 AM

Excelente!

La verdad es que un inspector de objetos es algo que siempre hecho en falta. Alguna vez hablando del tema con Walter Negro, la idea que surgió era que si la DATA estaba como un elemento del array-objeto, sabiendo el índice se podría intentar obtener el valor. En xHarbour Walter lo resolvió, el estaba muy puesto con el tema objetos, pero en Harbour habría que buscar si es posible tener esa funcionalidad.

Gracias.

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Ajuste para samples\insptest.prg
Posted: Thu Sep 15, 2011 07:20 AM

Antonio,

me he puesto a leer classes.c despues de muuucho tiempo. He encontrado que se han implementado las funciones amigas, que aparentemente tienen permitido un acceso menos restringido a los componentes.

HB_FUNC( __CLSADDFRIEND )

permite añadir un símbolo a la lista de funciones amigas, con lo que se podría probar añadir una funcion propia para facilitar la inspección del objeto. No he probado nada, solo lo he estado mirando, en nuestro caso es un método, habrá que crear la función.

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"

Continue the discussion