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
[-]
TTest1 = function() : PChar; stdcall;
implementation
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;