Ver Mensaje Individual
  #1  
Antiguo 08-04-2019
Avatar de Maniches
Maniches Maniches is offline
Miembro
 
Registrado: nov 2012
Ubicación: Lima - Perú
Posts: 67
Reputación: 12
Maniches Va por buen camino
Lightbulb Ejecutable creado en Delphi 6 utiliza librería en Delphi Rio(dll)

Buen Días a los amigos del foro,
Aquí después de unos días acudiendo a su experiencia y me ayuden a resolver un problema.

Proceso: Se quiere crear una DLL en Delphi 10 y que esta sea utilizada desde Delphi 6.
Nota: Cuando se define y crea ambos proyectos en D10 y usando la unidad “SimpleShareMem” para liberar la librería, no me da ningún problema usando todo como “string”, Si creo el App en D6 y que este utilice la DLL(D10) este genera un error de “Access Violation!!!”.

Yo he creado la DLL que devuelva tipo PCHAR por recomendación de unos foros y al ejecutar el App D6 ya no me muestra error, pero tan solo me devuelve un solo carácter de la cadena. Según el ejemplo tan solo devuelve: "P"

Me ayudan a detectar el problema en el App D6, La forma de como obtener la cadena completa desde el App D6?.


Muchas Gracias.


Código de la DLL en D10:
Código Delphi [-]
library MyLibrary;
uses
  System.SimpleShareMem,
  System.SysUtils,
  System.Classes;

function Test1(): PChar; stdcall;
begin
  Result:= PChar('Prueba de Función en DLL');
end;

exports
  Test1;

La APP en D6 y utiliza la DLL(Creada D10): (Contiene 2 formas de leer la DLL)
Código Delphi [-]
// PARA USO DE DLL EN BTN2
TTest1 = function() : PChar; stdcall;

implementation

// PARA USO DE DLL EN BTN1
function Test1() : PChar; stdcall; external 'MyLibrary.dll';

procedure TFormMain.btn1Click(Sender: TObject);
var
  sResult : string;
begin
  sResult:= string(Test1);
  memo1.Lines.Clear;
  memo1.Lines.Add(sResult);
end;

procedure TFormMain.btn2Click(Sender: TObject);
var
  sResult: string;
  Handle: THandle;  
  TestStr: TTest1;
begin
  Handle := LoadLibrary('MyLibrary.dll');
  if Handle <> 0 then
    @TestStr:= GetProcAddress(Handle, 'RestAPIfJSON');
    if @ TestStr <> nil then
    begin
      sResult := string(TestStr);
      mmoJSONResult.Lines.Clear;
      mmoJSONResult.Lines.Add(sResult);
    end;
    FreeLibrary(Handle);
  end;
end;
__________________
Maniches
maniches@outlook.com
Responder Con Cita