Мой предпочтительный метод — передать буфер из Inno Setup в функцию C#, которая вернет строку внутри этого буфера. Я придумал этот код:
Функция C#:
Код: Выделить всё
[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
static int Test([Out, MarshalAs(UnmanagedType.LPWStr)] out string strout)
{
strout = "teststr";
return strout.Length;
}
Код: Выделить всё
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;
Как я могу вернуть строку из этой DLL?
Обратите внимание, что я использую версию Inno Setup для Юникода. Я также не хочу использовать COM для вызова этой функции или для выделения буфера в DLL и возврата его в Inno Setup.
Подробнее здесь: https://stackoverflow.com/questions/207 ... etup-scrip