Zwracanie ciągu znaków z biblioteki DLL C # z niezarządzanym eksportem do skryptu Inno Setup

Mam bibliotekę C # DLL, która ujawnia użycie funkcjiEksport niezarządzany który jest wywoływany bezpośrednio przez skrypt Inno Setup Pascal. Ta funkcja musi zwrócić ciąg znaków do Inno Setup. Moje pytanie brzmi: jak mogę to osiągnąć?
Moją preferowaną metodą jest przekazanie bufora z Inno Setup do funkcji C #, która zwróci łańcuch w tym buforze. Wymyśliłem ten kod:

Funkcja C #:

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

Skrypt 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;

Kiedy uruchomię ten kodRes zmienna jest pusta (w dzienniku widzę „”)

Jak mogę zwrócić ciąg z tej biblioteki DLL?

Zauważ, że używam wersji Unicode Inno Setup. Nie chcę też używać COM do wywoływania tej funkcji ani do przydzielania bufora w bibliotece DLL i zwracania jej do Inno Setup.

questionAnswers(1)

yourAnswerToTheQuestion