FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Creating a LIB or DLL
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Creating a LIB or DLL
Posted: Tue Oct 07, 2014 11:27 PM
Creo que ahora he entendido mejor lo que preguntabas.

Puesto que pasas de PRG a C, pierdes las variables por referencia. Salvo que la variable por referencia se convierta en un puntero a la variable.

Prueba asi:

Code (fw): Select all Collapse
HB_EXPORT char * PASCAL _export HBDLLSTRING5( char * cProcName, char * cText1, HB_PTR cText2, char * cText3  )
{
   PHB_ITEM pResult;  
   PHB_ITEM pItem1 = hb_itemPutC( NULL, cText1 );
   PHB_ITEM pItem2 = hb_itemPutPtr( NULL, cText2 );
   PHB_ITEM pItem3 = hb_itemPutC( NULL, cText3 );
   MessageBox( 0, "Point  in hbdllstring5", "1", 0 );
   pResult = hb_itemDoC( cProcName, 3, pItem1, pItem2, pItem3, 0 );
   hb_itemRelease( pItem1 );
   hb_itemRelease( pItem2 );
   hb_itemRelease( pItem3 );
   return hb_itemGetC( pResult );
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Creating a LIB or DLL
Posted: Tue Oct 07, 2014 11:54 PM

Vuelvo a mirarlo y creo que no tiene solución.

Salvo que se me escape algo...

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 5
Joined: Mon Sep 29, 2014 10:58 AM
Re: Creating a LIB or DLL
Posted: Thu Oct 09, 2014 01:02 AM

Seria uma solução completa além do retorno, a passagem por referência.
A função retornando valor já ajuda muito também.
Isso me queimou muitos neurônios. rs.
Memso assim obrigado pelas dicas.

Posts: 5
Joined: Mon Sep 29, 2014 10:58 AM
Re: Creating a LIB or DLL
Posted: Thu Oct 09, 2014 02:01 PM
Antonio,

Bom dia!

Ainda não desisti!, observe o código abaixo que funciona a passagem por referência, teria como utilizar técnica com HBDLLSTRING5 ?

Code (fw): Select all Collapse
hLib := hb_libLoad( "DllMinGw.dll" )
c:="test1"
x:=hb_DynCall( { "test", hLib, HB_DYN_CTYPE_CHAR_PTR } ,@c) //funciona
hb_libFree( hLib )

Code (fw): Select all Collapse
  HB_EXPORT 
  char *
  _export
  test(char *a)
  {
     MessageBox( NULL, a, TEXT( HB_I_("Valor de Entrada") ), MB_ICONASTERISK );
     hb_strncpyUpperTrim(a,"teste",sizeof( a ) + 1); //ou hb_strncpy(a,"teste",sizeof( a ) + 1) ou strncpy(a,"teste",sizeof( a ) + 1);
     MessageBox( NULL, a, TEXT( HB_I_("Valor de Saída") ), MB_ICONASTERISK );
     return a;
  }

Continue the discussion