Ajuste para samples\insptest.prg

Post Reply
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Ajuste para samples\insptest.prg

Post by Carlos Mora »

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: Select all

     #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"
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Ajuste para samples\insptest.prg

Post by Carlos Mora »

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: Select all

     /* 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"
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Ajuste para samples\insptest.prg

Post by Antonio Linares »

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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Ajuste para samples\insptest.prg

Post by Antonio Linares »

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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Ajuste para samples\insptest.prg

Post by Antonio Linares »

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- ... a3a54047d#
regards, saludos

Antonio Linares
www.fivetechsoft.com
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Ajuste para samples\insptest.prg

Post by Carlos Mora »

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"
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Ajuste para samples\insptest.prg

Post by Carlos Mora »

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"
Post Reply