FunSwap.. no funciona en todo el sistema -ANTONIO

FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Adolfo » Tue Mar 05, 2013 1:15 pm

Antonio

Hace tiempo publicastes la rutina de FUNSWAP, yo la quiero utilizar para reemplazar la funcion DATE()

FunSwap("DATE","MYDATE")

Pero solo me funciona en el PRG principal, yo tengo puesta la llamada dentro de la funcion Main(), esperando que reemplazara DATE() en TODO EL SISTEMA, pero no ocurre asi.
La funcion de reemplazo tambien esta dentro de ese prg, y no es static.

Function MYDATE()
Return CTOD("01/01/2013")


Me falto algo.
El codigo es el mismo que publicastes

Code: Select all  Expand view
//------------------------------------------------------------
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>

HB_FUNC( NEXTMEM ) // --> nHardwareMemory
{
   MEMORYSTATUSEX mst;

   memset( &mst, 0, sizeof( MEMORYSTATUSEX ) );
   mst.dwLength = sizeof( MEMORYSTATUSEX );

   GlobalMemoryStatusEx( &mst );

   hb_retnll( mst.ullAvailPhys );
}

HB_FUNC( CURDRIVE )
{
   char szCurDrive[ 1 ];
   const char * szDrive;

   szCurDrive[ 0 ] = ( ( char ) hb_fsCurDrv() ) + 'A';
   hb_retclen( szCurDrive, 1 );
}

typedef void ( * PFUNC ) ( void );

HB_FUNC( FUNSWAP )
{
   PHB_SYMB symFirst = hb_dynsymSymbol( hb_dynsymFindName( hb_parc( 1 ) ) );
   PHB_SYMB symLast  = hb_dynsymSymbol( hb_dynsymFindName( hb_parc( 2 ) ) );
   PHB_FUNC pFirst   = symFirst->value.pFunPtr;

   symFirst->value.pFunPtr = symLast->value.pFunPtr;

   hb_retnl( ( LONG ) pFirst );
}

HB_FUNC( EXECPTR )
{
   PFUNC p = ( PFUNC ) hb_parnl( hb_pcount() );

   p();
}
#pragma ENDDUMP


Aproveche de agregar 2 funciones mas que utilizo, NEXTMEM y CURDRIVE
Cualquier Ayuda sera bienvenida

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Adolfo » Wed Mar 06, 2013 11:31 am

UP... nadie con algun tip ?
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Antonio Linares » Wed Mar 06, 2013 6:12 pm

Adolfo,

Prueba a declarar "extern mydate" en los otros PRGs
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41356
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Adolfo » Wed Mar 06, 2013 9:22 pm

Antonio

No funciono.. asi que en el apuro, cambie las 300+ llamadas a Date() por mi propia funcion.
Solucionada la urgencia, pero me gustaria haber usado la FUNSWAP(), una sola modificacion habria sido excelente.

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Antonio Linares » Thu Mar 07, 2013 8:38 am

Adolfo,

Yo publiqué FunSwap() en su dia solo como una prueba de concepto, pero obviamente es un hack y no hay garantía de continuidad, puesto que no es una función oficialmente soportada.

Lo que no entiendo es porque el cambio no funciona en toda la aplicación, eso es realmente extraño...

Podemos hacer algunas pruebas, para ver porque no funciona, si tienes especial interés en seguir usandola.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41356
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Adolfo » Thu Mar 07, 2013 11:41 am

Gracias por tu interes Antonio (como siempre)...

Este fin de semana preparo un test algo mas complejo con varios prg, asi vemos por donde esta el problema.

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby lucasdebeltran » Thu Mar 07, 2013 1:09 pm

Amigos,

Lo que se produce con el ejemplo son unos errores de compilación en C:
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
swap.c:
Error E2451 swap.prg 37: Undefined symbol 'LONG' in function HB_FUN_FUNSWAP
Error E2121 swap.prg 37: Function call missing ) in function HB_FUN_FUNSWAP
Warning W8004 swap.prg 38: 'pFirst' is assigned a value that is never used in function HB_FUN_FUNSWAP


El ejemplo es sencillo:
Code: Select all  Expand view
#include "FiveWin.ch"

static pOld

function Main()

   pOld := FunSwap( "TIME", "MYTIME" )

   MsgInfo( Time() ) // Hemos reemplazado la función Time() original ! :-)

return nil


function MyTime()

   local uRet := ExecPtr( pOld ) // en caso de que queramos llamar a la función original

return "now"




#pragma BEGINDUMP

#include <hbapi.h>

typedef void ( * PFUNC ) ( void );

HB_FUNC( FUNSWAP )
{
   PHB_SYMB symFirst = hb_dynsymSymbol( hb_dynsymFindName( hb_parc( 1 ) ) );
   PHB_SYMB symLast  = hb_dynsymSymbol( hb_dynsymFindName( hb_parc( 2 ) ) );
   PHB_FUNC pFirst   = symFirst->value.pFunPtr;

   symFirst->value.pFunPtr = symLast->value.pFunPtr;

   hb_retnl( ( LONG ) pFirst );
}

HB_FUNC( EXECPTR )
{
   PFUNC p = ( PFUNC ) hb_parnl( hb_pcount() );

   p();
}

#pragma ENDDUMP
 




Como son temas de C, yo me pierdo, lo siento.
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Adolfo » Thu Mar 07, 2013 1:20 pm

Lucas

Que utilizas, xHarbour o Harbour.

Yo Uso HB3 y con el ejemplo no he tenido ningun problema... solo que el cambio de funcion se hace en el PRG desde donde se hace la llamada.

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby lucasdebeltran » Thu Mar 07, 2013 2:44 pm

Adolfo,

Lo tienes en mi firma ;)

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.02 [producción]


Uso el último Harbour de Fivetech. Para compilar buildh tttprg
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Antonio Linares » Fri Mar 08, 2013 10:25 am

Lucas,

Hay que cambiar LONG por HB_LONG

A ver si con eso te compila o te da algún otro error, no estoy ahora mismo en la oficina y no puedo probarlo
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41356
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby lucasdebeltran » Fri Mar 08, 2013 11:50 am

Antonio,

Con ese cambio, funciona perfecto con BCC 5.82. Sin embargo, con MSVC2010 no admite el cambio de función, sigue mostrando time original.

En todo caso, ya no se producen errores ni de compilación ni de enlazado.

Este es el código:
Code: Select all  Expand view
#include "FiveWin.ch"

static pOld

function Main()

   pOld := FunSwap( "TIME", "MYTIME" )

   MsgInfo( Time() ) // Hemos reemplazado la función Time() original ! :-)

return nil


function MYTIME

   local uRet := ExecPtr( pOld ) // en caso de que queramos llamar a la función original

return "now - function reemplazada"





#pragma BEGINDUMP

#include <hbapi.h>

typedef void ( * PFUNC ) ( void );

HB_FUNC( FUNSWAP )
{
   PHB_SYMB symFirst = hb_dynsymSymbol( hb_dynsymFindName( hb_parc( 1 ) ) );
   PHB_SYMB symLast  = hb_dynsymSymbol( hb_dynsymFindName( hb_parc( 2 ) ) );
   PHB_FUNC pFirst   = symFirst->value.pFunPtr;

   symFirst->value.pFunPtr = symLast->value.pFunPtr;

   hb_retnl( ( HB_LONG ) pFirst );
}

HB_FUNC( EXECPTR )
{
   PFUNC p = ( PFUNC ) hb_parnl( hb_pcount() );

   p();
}

#pragma ENDDUMP
 




PD. Antonio, ¿has pensado en organizar un curso de C y Harbour DE PAGO?.

Mil gracias.
Muchas gracias. Many thanks.

Un saludo, Best regards,

Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]

Implementando MSVC 2010, FWH64 y ADO.

Abandonando uso xHarbour y SQLRDD.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Antonio Linares » Fri Mar 08, 2013 5:01 pm

Lucas,

No lo habia pensado, pero si un grupo de usuarios está interesado, no tengo inconveniente en impartir un curso :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41356
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby Patricio Avalos Aguirre » Fri Mar 08, 2013 8:25 pm

Antonio:

Sería bueno para que lo analices

serian una buena inversion para uno..
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
 
Posts: 1059
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: FunSwap.. no funciona en todo el sistema -ANTONIO

Postby mantonio_08 » Sun Mar 10, 2013 12:48 am

Y EL CURSO SERIA POR QUE VIA.. ( INTERNET ) O VIA CURSO ESCRITO. ??
mantonio_08
 
Posts: 330
Joined: Fri May 25, 2007 9:06 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 40 guests