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.