Intercambio de cadenas (PChar) entre una DLL compilada de Freepascal y un EXE compilado de Delphi
Después de muchos experimentos, encontré una manera de intercambiar PChar desde una DLL compilada por FreePascal con un EXE compilado por Delphi. Estoy a cargo del código fuente DLL y EXE, pero uno DEBE ESTAR en FreePascal y el otro en Delphi. Mi solución involucra los siguientes métodos en la DLL:
function GetAString(): PChar;
var aString: string;
begin
aString := 'My String';
result := StrAlloc(length(aString) + 1);
StrPCopy(result, aString);
end;
procedure FreeString(aString: PChar);
begin
StrDispose(aString);
end;
Y desde el Delphi EXE, para llamar al método GetAString, necesito llamar al método GetAString, guardar el PChar en una cadena Delphi real y llamar al método FreeString.
¿Es esta la mejor manera de intercambiar una cadena de una DLL de FreePascal con un EXE de Delphi? ¿Puedo evitar la llamada a FreeString desde Delphi?
Y finalmente, si esa es la solución correcta, ¿cómo se comportará con Delphi 2010 y WideString de forma predeterminada: ¿necesito forzar WidePChar también en FreePascal?