Retornando uma seqüência de caracteres de uma DLL C # com exportações não gerenciadas para o script Inno Setup

Eu tenho uma DLL C # que expõe uma função usandoExportações não gerenciadas que é chamado diretamente por um script Inno Setup Pascal. Esta função precisa retornar uma seqüência de caracteres para Inno Setup. Minha pergunta é como posso fazer isso?
Meu método preferido é passar um buffer do Inno Setup para a função C # que retornará a string dentro desse buffer. Eu vim com este código:

Função C #:

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

Script Inno Setup:

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;

Quando executo esse código, oRes variável está vazia (vejo "" no log)

Como posso retornar uma string dessa DLL?

Observe que estou usando a versão Unicode do Inno Setup. Também não quero usar COM para chamar essa função nem para alocar um buffer na DLL e devolvê-lo ao Inno Setup.