FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Intercambiando datos con DLL Pascal
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Intercambiando datos con DLL Pascal
Posted: Thu Nov 23, 2017 09:14 AM
Buenas amigos, estoy haciendo pinitos en Delphi para crear algunas funciones y he creado una DLL muy simple para acceder desde Harbour/FW.

Code (fw): Select all Collapse
library ejemplolibreria;

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

procedure pruebaMensaje (mensaje : string); stdcall;
begin
  ShowMessage (mensaje) ;
end;

exports pruebaMensaje;

begin
end.


La llamada desde Harbour/FW

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

Function Main()
  pruebaMensaje ('hola')
Return (nil)

DLL32 FUNCTION pruebaMensaje ( mensaje AS PTR)  AS WORD PASCAL LIB "ejemplolibreria.dll"


Hace la llamada correctamente y muestra el cuadro de mensaje pero en blanco, como si no le pasara el parámetro.
¿Qué estoy haciendo mal?

Gracias!
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Intercambiando datos con DLL Pascal
Posted: Thu Nov 23, 2017 09:58 AM
Prueba con


AS LPSTR
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Intercambiando datos con DLL Pascal
Posted: Thu Nov 23, 2017 10:06 AM
Cristóbal con LPSTR ni siquiera muestra el cuadro.

Si hago
Code (fw): Select all Collapse
library ejemplolibreria;

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

procedure pruebaMensaje (mensaje : Integer; mensaje2 : string ); stdcall;
begin
  ShowMessage (inttostr (mensaje)) ;
  ShowMessage (mensaje2) ;
end;

exports pruebaMensaje;

begin
end.


y ...

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

Function Main()
  pruebaMensaje (123,"123")

Return (nil)

DLL FUNCTION pruebaMensaje ( mensaje AS _INT, mensaje2 AS PTR ) AS WORD PASCAL LIB "ejemplolibreria.dll"


El primer mensaje (pasado por _INT) se muestra pero el segundo , probado como STRING, PTR o LPSTR no muestra nada. Si lo pruebo como STRING o PTR muestra el mensaje vacío, si lo pruebo como LPSTR ni siquiera muestra el mensaje ...
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Intercambiando datos con DLL Pascal
Posted: Fri Nov 24, 2017 08:18 AM
Vuelvo ...

Codigo Pascal ..

Code (fw): Select all Collapse
library ejemplolibreria;

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

procedure pruebaMensaje (mensaje : Integer; mensaje2 : Integer ) ; stdcall;
begin
  ShowMessage (inttostr (mensaje)) ;
  mensaje2 := 999 ;
end;

exports pruebaMensaje;

begin
end.


Código harbour ...
Code (fw): Select all Collapse
#include "fivewin.ch"

Function Main()
Local nNumero:=0

  pruebaMensaje (123,@nNumero)
  
  msginfo (nNumero)

Return (nil)

DLL FUNCTION pruebaMensaje ( mensaje AS _INT, mensaje2 AS _INT ) AS WORD PASCAL LIB "ejemplolibreria.dll"


Además de que no consigo pasarle una cadena, el nNumero pasado por referencia tampoco actualiza los valores. ¿Estoy intentando hacer algo imposible? ¿Debería hacerlo en C++ en vez de en Delphi?
¿Alguna idea?

Gracias!
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 162
Joined: Wed Feb 22, 2017 02:19 AM
Re: Intercambiando datos con DLL Pascal
Posted: Sun Nov 26, 2017 04:54 AM

Estimado A mi me toco lo mismo de echo es complicado desde FW para un string, yo desarrolle una dll en delphi y para poder pasaler parametros en string tuve que utilizar un ini. Pero logre pasar paremetros de esta manera @Largo cuando es un string..

function incios...

OCAL cDllName:="SCLib.DLL"
Local fHandle:=0
Local ACR120libHandle := LoadLibrary( cDllName)

HaveTag :=space(150)
SerialNum :=space(110)
Largo :=0
TagType :=space(50)
RTag :=0
RSn :=space(7)

fRetCode := ACR120_Select(fHandle, @HaveTag, @Largo, @SerialNum)

if ACR120libHandle <> 0
FreeLibrary(ACR120libHandle)
ENDIF

return

DLL FUNCTION ACR120_Select(fHandle AS LONG , @HaveTag AS PTR , @Largo AS PTR, @SerialNum AS PTR) AS LONG PASCAL FROM "ACR120_Select" LIB "acr120u.DLL"

Regards.
S.I.T.U.
Sistemas Inteligentes de transporte urbano
http://www.situcr.com
oscarchacon@Situcr.com
Desarrollos BA4/B4j androide
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Intercambiando datos con DLL Pascal
Posted: Mon Nov 27, 2017 08:33 AM

Gracias, haré las pruebas como indicas.

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4

Continue the discussion