Ver Mensaje Individual
  #1  
Antiguo 29-01-2009
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Reputación: 21
sitrico Va por buen camino
Una DLL Delphi para usar desde Visual Fox Pro

Tengo que unificar una serie de calculos en varias aplicaciones hechas n Delphi y VFP, la manera mas practica que se me ocurrio fue crear una dll y llamarla desde las distintas aplicaciones.

Tengo Esta DLL:

Código Delphi [-]
library ToolsProfit;

uses
  SysUtils,
  Classes,
  Forms,
  UtilidadGeneral in '..\..\Unidades\UtilidadGeneral.pas';

{$R *.res}

Procedure Informa(x : PChar); StdCall; Export;
begin
MessageBoxStr(x,'Tipo');
End;

Function StrMontoGringo(c:Currency):Pchar;
Var
m : String;
begin
m := Trim(fs(c,15,4));
m := StrReplace(m,'.',#0);
Result := Pchar(Trim(StrReplace(m,',','.')));
end;

Procedure DecodeAux02(Aux02:Pchar; Var Piezas,Largo,Altoouble; Var Ubicacion:Pchar);
Var
s : ShortString;
Aux : String;
begin
//MessageBoxStr(Aux02),'');
Aux  := StrReplace(aux02,'.',',');
Piezas := 0;
Largo := 0;
Alto := 0;
Ubicacion := '';
s := ExtraerSTRDelimitada(Aux,';');
If s <> '' Then
   Piezas := StrToCurr(s);
s := ExtraerSTRDelimitada(Aux,';');
If s <> '' Then
   Largo := StrToCurr(s);
s := ExtraerSTRDelimitada(Aux,';');
If s <> '' Then
   Alto := StrToCurr(s);
Ubicacion := AnsiStrUpper(Pchar(Aux));
end;

Function  EncodeAux02(Piezas,Largo,Altoouble; Ubicacion:Pchar):Pchar;
Begin
Result := PChar(Trim(StrMontoGringo(Piezas)+';'+
               StrMontoGringo(Largo)+';'+
               StrMontoGringo(Alto)+';'+
               AnsiStrUpper(Ubicacion)));
End;

Function StockEnFactores(Piezas,Largo,Altoouble)ouble;
Const
Factor = 10000;
begin
Result := Trunc(Piezas*Largo*Alto*Factor)/Factor; 
End;

Function StockEnAux02(Aux02:PChar)ouble;
Var
Piezas,Largo,Altoouble;
Ubicacion:PChar;
begin
DecodeAux02(Aux02,Piezas,Largo,Alto,Ubicacion);
Result := StockEnFactores(Piezas,Largo,Alto);
End;

Exports
  DecodeAux02,
  EncodeAux02,
  StockEnFactores,
  StockEnAux02,
  Informa;

begin
end.

y en VFP la declaro:

Código:
DECLARE SINGLE DecodeAux02 IN 'P:\Profit_a\reporadi\ToolsProfit';
String, Double, Double, Double, String

DECLARE Informa IN 'P:\Profit_a\reporadi\ToolsProfit';
String
El problema es con los datos tipo STRING vs PCHAR Al llamar las rutinas desde VFP (estoy probando con Procedure Informa(x : PChar); StdCall; Export que debería mostrar un mensaje con el texto del parametro me genera un error:

Data type mistmach - Es un problema de tipos

si cambio la variable por un texto constante ('xxxxx') si me muestra el mensaje.

1.- Que tipo de datos puedo usar para recibir un String desde VFP como parametro?

probe: ShortString,String (con shareMem) y pChar y todosdan mas o menos lo mismo
__________________
Sitrico

Última edición por sitrico fecha: 30-01-2009 a las 00:09:26.
Responder Con Cita