FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Migrar xHarbour a Harbour HBClass
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Migrar xHarbour a Harbour HBClass
Posted: Fri Apr 14, 2017 11:01 PM
Hola

MIgrando de xHarbour a Habrbour 3.2 tengo problemas con la HBClass, al parecer Harbour no la reconoce

__oDatabase := HBClass():New( cClsName, __CLS_PARAM ( cFromClass ) )

Ya que me arroja lo siguiente

Error: Unresolved external '_HB_FUN___CLS_PARAM' referenced from...

Alguna solucion ?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Fri Apr 14, 2017 11:24 PM
Cambia esto:
Code (fw): Select all Collapse
__oDatabase := HBClass():New( cClsName, __CLS_PARAM ( cFromClass ) )

por esto:
Code (fw): Select all Collapse
__oDatabase := HBClass():New( cClsName,{ cFromClass } )
______________________________________________________________________________

Sevilla - Andalucía
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Fri Apr 14, 2017 11:40 PM

No funciono

Arroja esto

:SETREADPADALL

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Fri Apr 14, 2017 11:49 PM

Pero eso no tiene nada que ver con el error anterior...
Tal vez si pusieras más código podríamos ver a qué se debe el error :oops:

______________________________________________________________________________

Sevilla - Andalucía
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Fri Apr 14, 2017 11:53 PM

Aca el codigo

function TMyMSQuery( cCls ) ; return( MyGenClass( cCls, TMSQuery() ) )

The variable __aHCls
AAdd( __aHCls, { cClsName, __nClassH } )

the class and handle
How free

static __aHCls := {}

include "HbClass.ch"

function MyGenClass( cClsName, FromClass )

local n, __nClassH, __odatabase
local cFromClass := upper( FromClass:ClassName() )

cClsName := "TMY" + Upper( if( empty( cClsName ), ;
PadL( len( __aHCls ), 7, "0" ), Alltrim( cClsName ) ) )

if ( n := AScan( __aHCls, { |aClass| aClass[ 1 ] == cClsName } ) ) == 0
_HB_CLASS cClsName
__oDatabase := HBClass():New( cClsName, { cFromClass } )
__oDatabase:Create()
__nClassH := __oDatabase:hClass
AAdd( __aHCls, { cClsName, __nClassH } )
else
__nClassH := __aHCls[ n, 2 ]
endif

return( __clsInst( __nClassH ) )

//Cretae the function for deleted __aHCls the handling
//the class

Function CloseClass( oClase )
Local n,cClsName

cClsName := "TMY" + Upper( PadL( len( __aHCls ), 7, "0" ) )

if ( n := AScan( __aHCls, { |aClass| aClass[ 1 ] == cClsName } ) ) == 0
// ya se creo la clase
else
__aHCls[ n, 1 ]:=NIL
__aHCls[ n, 2 ]:=NIL
ADEL( __aHCls , n )

endif
oClase:=NIL

return( cClsName )

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sat Apr 15, 2017 01:26 AM
Esto es parte del código de mi librería Eagle1.
Y en esa parte no se hace referencia al método :setReadPadAll()
Code (fw): Select all Collapse
//---------------------------------------------------------------------------//
// Activa la lectura de todos los campos caracter formateados a su tamaño

METHOD SetReadPADAll( lRead ) CLASS TMSDataSet
return( E1SetPadAll( ::hMySQL, lRead ) )

//---------------------------------------------------------------------------//

Y la parte en C
<div class="c" id="{CB}" style="font-family: monospace;">
//---------------------------------------------------------------------------//
// Activa o desactiva la lectura de cadenas con tamao fijo (PAD) en todas

E1_FUNC( E1SETPADALL )
{
    PE1_DATASET hDS = (PE1_DATASET) hb_parnl( 1 );
    PHB_ITEM iRead = hb_param( 2, HB_IT_LOGICAL );

    if( iRead )
    {
        BOOL bRead = hb_itemGetL( iRead );

        if( !( bRead == hDS->bReadPadAll ) )
        {
            unsigned int uiCol;

            hDS->bReadPadAll = bRead;

            for( uiCol = 0; uiCol < hDS->uiColCount; uiCol++ )
            {
                if( E1_PCOLUMN( hDS, uiCol )->cType == 'C' )
                {
                    E1_PCOLUMN( hDS, uiCol )->GetValue = ( bRead ? E1_GetPADC : E1_GetC );
                }
            }
            hb_retl( !bRead );
        }
    }
    hb_retl( hDS->bReadPadAll );
}

//---------------------------------------------------------------------------//

 </div>
______________________________________________________________________________

Sevilla - Andalucía
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sat Apr 15, 2017 01:45 AM

El codigo que te puse no usa metodos..pero igual sigue sin funcionar

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sat Apr 15, 2017 01:50 AM

No funciona...arroja esto

Error description: Error BASE/1004 Message not found: TMY0000000:SETREADPADALL
Args:
[ 1] = O TMY0000000

Stack Calls

Called from: => __ERRRT_SBASE( 0 )
Called from: ../../../tobject.prg => TMY0000000:ERROR( 0 )
Called from: ../../../tobject.prg => (b)HBOBJECT( 0 )
Called from: ../../../tobject.prg => TMY0000000:MSGNOTFOUND( 0 )
Called from: ../../../tobject.prg => TMY0000000:SETREADPADALL( 0 )

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sat Apr 15, 2017 10:03 AM

Si no usas métodos o sea objetos o sea clases no necesitas ese código:
La funcion TMyMSQuery es una meta clase que crea clases especializados en una tabla o SELECT de MySQL.
Y :SetReadPADAll() es un método.

______________________________________________________________________________

Sevilla - Andalucía
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sat Apr 15, 2017 12:09 PM

Y a que se debe que lance el error al cambiar __oDatabase := HBClass():New( cClsName, __CLS_PARAM ( cFromClass ) )por __oDatabase := HBClass():New( cClsName,{ cFromClass } ) ?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sat Apr 15, 2017 06:37 PM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sat Apr 15, 2017 06:41 PM

Segun esto no es posible migrar de xHarbour a Harbour ?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sat Apr 15, 2017 06:55 PM

Lo que debes plantearte es modificar ese código para que no necesite usar esas funciones

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sat Apr 15, 2017 06:56 PM

No creo que sea una cosa 'imposible'. Otra cosa es que si se usan 'internals' del lenguaje, hay que asumir las consecuencias. Como dice Antonio, una de esas consecuencias es por lo que estás pasando: prestaciones que no son de "usuario", como crear clases a bajo nivel, que no son directamente extrapolables de un lenguaje a otro. Para que eso te salga bien tienes que programar a nivel dios (o ser Manu expósito :).

De todas maneras revisando el hilo el problema es que no reconoce el mensaje 'SETREADPADALL', por lo que te recomiendo verifiques en la superclase como está definido ese método. Manu explicó que hace ese método e incluyó el código, por lo que es por donde yo empezaría a buscar.

Un saludo

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Migrar xHarbour a Harbour HBClass
Posted: Sun Apr 16, 2017 10:26 AM

Carlos me sobrevaloras :D
De cualquier modo Eagle1 funciona tanto con Harbour como con xHarbour...

______________________________________________________________________________

Sevilla - Andalucía