FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Funciones en .dll
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Funciones en .dll
Posted: Fri Jul 05, 2013 12:56 AM
Amigos del foro.
Estoy integrando una .dll autocontenida, con algunas funciones propias. Hasta el momento he logrado hacer pruebas satisfactorias gracias a los ejemplos tanto en \samples, como aquí en el foro.
Hasta el momento todo iba bien, hasta que me atoré en una funcioncita que recibe como parámetro una fecha DATE y devuelve otra fecha DATE.
Solicito a los conocedores de C, algún ejemplo para poder solventar esto.
Aquí está el código que estoy probando, y no logro que me devuelva la fecha (DATE). Me devuelve un número.

Code (fw): Select all Collapse
#include "FiveWin.ch"

static hDLL

function Main()
local hItem4 := ItemNew( Date() )

   hDLL = LoadLibrary( "fapdll.dll" )

   MsgInfo ( FirstMonthDay("DIA1MES", hItem4), "1er dia del mes" )
   ItemRelease( hItem4 )

   FreeLibrary( hDLL )

return nil

DLL FUNCTION FirstMonthDay( cProc AS LPSTR, pItem1 AS LONG ) AS LONG PASCAL LIB hDLL

#pragma BEGINDUMP

#include <hbapi.h>
#include <hbapiitm.h>

HB_FUNC( ITEMNEW )
{
   hb_retnl( ( unsigned long ) hb_itemNew( hb_param( 1, HB_IT_ANY ) ) );
}

HB_FUNC( ITEMRELEASE )
{
   hb_retl( hb_itemRelease( ( PHB_ITEM ) hb_parnl( 1 ) ) );
}

#pragma ENDDUMP



Aquí, dentro de la .dll:
Code (fw): Select all Collapse
//-----------------------
Function Dia1Mes(dFecha) 
Return ctod( "01/"+strZero(month(dFecha),2)+"/"+str(year(dFecha),4) )

#pragma BEGINDUMP

#include <windows.h>
#include <hbvm.h>
#include <hbapiitm.h>


LONG __stdcall __export FirstMonthDay( char * cProcName, PHB_ITEM pParam1 )
{
   return hb_itemGetNL( hb_itemDoC( cProcName, 1, pParam1 ) ) ;
}   

#pragma ENDDUMP


Muchas gracias, de antemano.
Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Funciones en .dll
Posted: Fri Jul 05, 2013 03:54 AM
Francisco,

Nunca me agradó el itemAPI que CA introdujo en Clipper y que luego Harbour heredó, dicho esto... :-)

tu función en C FirstMonthDay() está devolviendo un LONG (un número de 32 bits) y además estas recogiendo como número la fecha que le das:

return hb_itemGetNL( hb_itemDoC( cProcName, 1, pParam1 ) ) ;

puesto que recibes una fecha, primero debes decidir en que formato la vas a usar. Uno sencillo es "AAAAMMDD", luego esa línea quedaria asi:

return hb_itemGetDS( hb_itemDoC( cProcName, 1, pParam1 ) ) ;

pero entonces tu función FirstMonthDay() no devolverá un LONG sino un char * (texto):

Code (fw): Select all Collapse
char * __stdcall __export FirstMonthDay( char * cProcName, PHB_ITEM pParam1 )
{
   return hb_itemGetDS( hb_itemDoC( cProcName, 1, pParam1 ) ) ;
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Funciones en .dll
Posted: Fri Jul 05, 2013 04:58 AM
Antonio,
Te agradezco mucho. Funciona!!!. Quedó así:

Code (fw): Select all Collapse
DLL FUNCTION FirstMonthDay( cProc AS LPSTR, pItem1 AS LONG ) AS LPSTR PASCAL LIB hDLL

Code (fw): Select all Collapse
char * __stdcall __export FirstMonthDay( char * cProcName, PHB_ITEM pParam1 )
{
   return hb_itemGetDS( hb_itemDoC( cProcName, 1, pParam1 ) ,"AAAAMMDD" ) ;
}

Gracias nuevamente, y saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion