Rückgabe einer Zeichenfolge aus einer C # -DLL mit nicht verwaltetem Export in das Inno Setup-Skript

Ich habe eine C # -DLL, mit der eine Funktion verfügbar gemacht wirdNicht verwaltete Exporte Dies wird direkt von einem Inno Setup Pascal-Skript aufgerufen. Diese Funktion muss einen String an Inno Setup zurückgeben. Meine Frage ist, wie kann ich das erreichen?
Meine bevorzugte Methode besteht darin, einen Puffer von Inno Setup an die C # -Funktion zu übergeben, die die Zeichenfolge in diesem Puffer zurückgibt. Ich habe mir diesen Code ausgedacht:

C # -Funktion:

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

Inno-Setup-Skript:

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;

Wenn ich diesen Code laufen lasseRes Variable ist leer (ich sehe "" im Protokoll)

Wie kann ich eine Zeichenfolge von dieser DLL zurückgeben?

Beachten Sie, dass ich die Unicode-Version von Inno Setup verwende. Ich möchte auch nicht COM verwenden, um diese Funktion aufzurufen oder einen Puffer in der DLL zuzuweisen und ihn an Inno Setup zurückzugeben.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage