Actualización a 64b y código C
Posted: Mon Apr 15, 2019 9:37 pm
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:
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,
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 );
}
//----------------------------------------------------------------------------//
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,