Page 3 of 3

Re: Borland7 versus VisualStudio

PostPosted: Fri Mar 18, 2016 8:14 pm
by Antonio Linares
JM,

Este código está funcionando bien con FWH 64. He implementado unos cambios en la funcion FWCALLDLL() para 64 bits,
que aunque se llama igual que la usada en 32 bits, su código es muy diferente:

Te envío por email las librerias modificadas. En la próxima versión de FWH 64 incluiremos estos cambios.

Code: Select all  Expand view
#include "FiveWin.ch"

Function Main()

  local cFichero := "c:\fwh\samples\test.exe"
  local nTipo    := 0

  GetBinaryType( cFichero, @nTipo )
  MsgInfo( nTipo, "Tipo de fichero" )

return nil

DLL32 FUNCTION GetBinaryType( cFile AS LPSTR, @nType AS PTR ) AS DWORD PASCAL FROM "GetBinaryTypeA" LIB "Kernel32.dll"

Re: Borland7 versus VisualStudio

PostPosted: Fri Mar 18, 2016 8:26 pm
by Antonio Linares
En realidad no hace falta escribir DLL32 ya que FWH lo traduce en DLL, por lo que esta sintaxis es correcta para 32 y 64 bits:

DLL FUNCTION GetBinaryType( cFile AS LPSTR, @nType AS PTR ) AS DWORD PASCAL FROM "GetBinaryTypeA" LIB "Kernel32.dll"

Re: Borland7 versus VisualStudio

PostPosted: Fri Mar 18, 2016 11:56 pm
by JmGarcia
¡¡¡ Funciona perfectamente en 64 bits !!! con las nuevas librerías, gracias Antonio.

Esperaremos a la siguiente versión de FWH64 para tener los cambios "oficializados" :D

Solo un dato curioso en 64 bits.
Si inicializo la variable nTipo a un valor negativo (manía que tengo para según que casos) como por ejemplo -1 el resultado de nTipo una vez ejecutada la función GetBinaryType es un número exageradamente grande de signo negativo. Si inicializo a cero u otro valor positivo el resultado es correcto.

En 32 bits esto no ocurre.

Re: Borland7 versus VisualStudio

PostPosted: Sat Mar 19, 2016 7:39 am
by Antonio Linares
JM,

gracias por tus pruebas y por tu información.

Al usar un numero negativo, el signo se guarda en la parte alta del número y de ahí
el número grande que te aparece. Imagino que Windows lo modifica parcialmente.

De todas formas, no hay que usar números negativos ahi :-)

Las diferencias entre 32 y 64 bits pueden ser por el compilador usado

Re: Borland7 versus VisualStudio

PostPosted: Sat Mar 19, 2016 9:29 am
by cnavarro
JmGarcia wrote:Solo un dato curioso en 64 bits.
Si inicializo la variable nTipo a un valor negativo (manía que tengo para según que casos) como por ejemplo -1 el resultado de nTipo una vez ejecutada la función GetBinaryType es un número exageradamente grande de signo negativo. Si inicializo a cero u otro valor positivo el resultado es correcto.


Lo mismo ocurre si no inicializas la variable, obtienes un valor muy grande pero de signo positivo
Evidentemente, quiero pensar que habrá que inicializarla con el mismo tipo de dato que va a devolver

Re: Borland7 versus VisualStudio

PostPosted: Sat Mar 19, 2016 6:55 pm
by JmGarcia
cnavarro wrote:Evidentemente, quiero pensar que habrá que inicializarla con el mismo tipo de dato que va a devolver

Ya pero el tipo DWORD puede tener valores negativos y positivos ¿no?

Sea como fuere habrá que tener cuidado con este tema.