Actualización a 64b y código C

Post Reply
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Actualización a 64b y código C

Post by FiveWiDi »

Hola a todos,

Hace mucho que no me logono en este foro, pero os voy leyendo con ganas.

El caso es que deseo actualizar mi vieja versión de FWH y en mi aplicación hago uso de la maravillosa clase TDbf de Manu Expósito (una versión antigua en PRG).
Esta clase la tengo en las entrañas y por todos lados de la aplicación y uno de los ficheros que usa tiene este código en C:

Code: Select all

//----------------------------------------------------------------------------//
//  AUTOR.....: Manuel Exp¢sito Su rez    Soft 4U '1994-2000                  //
//  e-Mail....: expo2001@wanadoo.es                                           //
//  CLASE.....: HBFORCE.C                                                     //
//  FECHA MOD.: 10/11/2000                                                    //
//  VERSION...: 9.00                                                          //
//  PROPOSITO.: Accesos a bajo nivel a la estructura WorkArea de Harbour      //
//----------------------------------------------------------------------------//

//----------------------------------------------------------------------------//
//Para las RDD nativas de Harbour

#include "hbrdddbf.h"
#include "hbapirdd.h"

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

HB_FUNC( DBFHDL )
{
   LPDBFAREA pArea = hb_rddGetCurrentWorkAreaPointer();
   if( pArea )

   // Con la nueva versión de Harbour (9.02), y el cambio del 'valor' hDataFile
   // por pDataFile en la estructura _DBFAREA de HbRddDbf.h, esta función no es
   // correcta y debe cambiarse por hb_retptr().
   //
   // hb_retni( pArea->hDataFile );
   //else
   //   hb_retni( 0 );

      hb_retptr( pArea->pDataFile );
   else
      hb_retptr( 0 );
}

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

HB_FUNC( ISSHARED )
{
   LPDBFAREA pArea = hb_rddGetCurrentWorkAreaPointer();
   if( pArea )
      hb_retl( pArea->fShared );
   else
      hb_retl( HB_FALSE );
}

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

HB_FUNC( ISREADONLY )
{
   LPDBFAREA pArea = hb_rddGetCurrentWorkAreaPointer();
   if( pArea )
      hb_retl( pArea->fReadonly );
   else
      hb_retl( HB_FALSE );
}

//----------------------------------------------------------------------------//
// Para la RDD ADS de Harbour
// Extraido de rddads.h

typedef unsigned long  ADSHANDLE;

typedef struct _ADSAREA_
{
   struct _RDDFUNCS * lprfsHost; /* Virtual method table for this workarea */
   HB_USHORT uiArea;                /* The number assigned to this workarea */
   void * atomAlias;             /* Pointer to the alias symbol for this workarea */
   HB_USHORT uiFieldExtent;         /* Total number of fields allocated */
   HB_USHORT uiFieldCount;          /* Total number of fields used */
   LPFIELD lpFields;             /* Pointer to an array of fields */
   void * lpFieldExtents;        /* Void ptr for additional field properties */
   PHB_ITEM valResult;           /* All purpose result holder */
   HB_BOOL fTop;                    /* TRUE if "top" */
   HB_BOOL fBottom;                 /* TRUE if "bottom" */
   HB_BOOL fBof;                    /* TRUE if "bof" */
   HB_BOOL fEof;                    /* TRUE if "eof" */
   HB_BOOL fFound;                  /* TRUE if "found" */
   DBSCOPEINFO dbsi;             /* Info regarding last LOCATE */
   DBFILTERINFO dbfi;            /* Filter in effect */
   LPDBORDERCONDINFO lpdbOrdCondInfo;
   LPDBRELINFO lpdbRelations;    /* Parent/Child relationships used */
   HB_USHORT uiParents;             /* Number of parents for this area */
   HB_USHORT heap;
   HB_USHORT heapSize;
   HB_USHORT rddID;

   /*
   *  ADS's additions to the workarea structure
   *
   *  Warning: The above section MUST match WORKAREA exactly!  Any
   *  additions to the structure MUST be added below, as in this
   *  example.
   */

   char * szDataFileName;        /* Name of data file */
   HB_USHORT uiHeaderLen;           /* Size of header */
   HB_USHORT uiRecordLen;           /* Size of record */
   HB_ULONG ulRecCount;             /* Total records */
   HB_ULONG ulRecNo;                /* Current record */
   HB_BYTE bYear;                   /* Last update */
   HB_BYTE bMonth;
   HB_BYTE bDay;
   HB_USHORT * pFieldOffset;        /* Pointer to field offset array */
   HB_BYTE * pRecord;               /* Buffer of record data */
   HB_ULONG maxFieldLen;
   HB_BOOL fValidBuffer;            /* State of buffer */
   HB_BOOL fRecordChanged;          /* Record changed */
   HB_BOOL fShared;                 /* Shared file */
   HB_BOOL fReadonly;               /* Read only file */
   HB_BOOL fFLocked;                /* TRUE if file is locked */
   ADSHANDLE hTable;
   ADSHANDLE hOrdCurrent;
   ADSHANDLE hStatement;
} ADSAREA;

typedef ADSAREA * ADSAREAP;

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

HB_FUNC( ADSDBFHDL )
{
   ADSAREAP pArea = hb_rddGetCurrentWorkAreaPointer();
   if( pArea )
      hb_retni( pArea->hTable );
   else
      hb_retni( 0 );
}

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

HB_FUNC( ADSISSHARED )
{
   ADSAREAP pArea = hb_rddGetCurrentWorkAreaPointer();
   if( pArea )
      hb_retl( pArea->fShared );
   else
      hb_retl( HB_FALSE );
}

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

HB_FUNC( ADSISREADONLY )
{
   ADSAREAP pArea = hb_rddGetCurrentWorkAreaPointer();
   if( pArea )
      hb_retl( pArea->fReadonly );
   else
      hb_retl( HB_FALSE );
}

//----------------------------------------------------------------------------//
 
El caso es que necesito de una alma caritativa que intente compilar este código con BCC a 64b para ver por donde cruje y que solución se le puede dar.

Si salvo este obstáculo podré evolucionar junto a FWH, si no quedaré atrás con los 32b.

Deseo actualizarme. FWH evoluciona sin prisa pero sin pausa. Me gusta.

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Actualización a 64b y código C

Post by cnavarro »

Carlos, seguramente será necesario tener los ficheros de encabezado también para realizar la migración, pero al margen de eso, y al ser un software propietario, lo normal es que nuestro querido amigo Manu, podrá realizar esa migración.
De todas formas cuando te decidas a actualizar tu versión, si sigues necesitando nuestra ayuda, ya sabes que puedes contar con ella.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Actualización a 64b y código C

Post by xmanuel »

Dalo por hecho...

Sólo te falla ese código o hay más?
______________________________________________________________________________
Sevilla - Andalucía
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: Actualización a 64b y código C

Post by FiveWiDi »

xmanuel wrote:Dalo por hecho...

Sólo te falla ese código o hay más?
Hola Manuel,

En c sólo tengo ese código; el resto es substituir el uso de Dolphin por las funciones propias de FWH64 para SQL.

Y ya puestos y como todo avanza, también cambiar el el uso de Barlib de Cayetano (otra joya!) por las funciones de FWH64.

Muchas gracias,
Un Saludo
Carlos G.

FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Actualización a 64b y código C

Post by Antonio Linares »

Carlos,

Estas son las funciones de FWH a usar para migrar tu código en Dolphin:

oConnection := Maria_Connect( cServer, cDataBase, cUser, cPassword )

ó puedes usar el comando equivalente:

Code: Select all

#xcommand FWCONNECT <oCn> HOST <cHost>  ;
        [<usr:USER,LANGFOLDER> <cUser> ] ;
        [ PASSWORD <cPassword>] ;
        [ <db:DB,DATABASE> <cDB> ] ;
        [ PORT <nPort> ] [ FLAGS <nFlags> ] ;
        [ CHARSET <chrset> ] [ MESSAGES <msglang> ] [ LOCALE <locale> ]
oRs = oConnection:Query( ... ) es igual

Bienvenido a bordo de nuevo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply