Devolver una cadena desde un archivo DLL de C # con exportaciones no administradas a Inno Setup script

Tengo un C # DLL que expone una función usandoExportaciones no gestionadas que es llamado directamente por un script Inno Setup Pascal. Esta función debe devolver una cadena a Inno Setup. Mi pregunta es ¿cómo puedo lograr esto?
Mi método preferido es pasar un búfer de Inno Setup a la función C # que devolverá la cadena dentro de este búfer. Se me ha ocurrido este código:

Función C #:

[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
static int Test([Out, MarshalAs(UnmanagedType.LPWStr)] out string strout)
{
   strout = "teststr";
   return strout.Length;
}

Inno Setup script:

function Test(var res: String):Integer; external 'Test@files:testdll.dll stdcall';

procedure test1; 
var
    Res: String;
    l: Integer;
begin
    SetLength(Res,256);
    l := Test(Res);
    { Uncommenting the following line causes an exception }
    { SetLength(Res,l); }
    Log('"Res"');
end;

Cuando corro este código elRes La variable está vacía (veo "" en el registro)

¿Cómo puedo devolver una cadena de esta DLL?

Tenga en cuenta que estoy usando la versión Unicode de Inno Setup. Tampoco quiero usar COM para llamar a esta función ni para asignar un búfer en la DLL y devolverlo a Inno Setup.

Respuestas a la pregunta(1)

Su respuesta a la pregunta