Возврат строки из DLL C # с неуправляемым экспортом в сценарий установки Inno
У меня есть C # DLL, которая выставляет функцию с помощьюНеуправляемый экспорт который вызывается непосредственно скриптом Inno Setup Pascal. Эта функция должна вернуть строку в Inno Setup. Мой вопрос, как я могу это сделать?
Мой предпочтительный метод - передать буфер из Inno Setup в функцию C #, которая будет возвращать строку внутри этого буфера. Я пришел с этим кодом:
C # функция:
[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
static int Test([Out, MarshalAs(UnmanagedType.LPWStr)] out string strout)
{
strout = "teststr";
return strout.Length;
}
Сценарий 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;
Когда я запускаю этот кодRes
переменная пуста (я вижу "" в журнале)
Как я могу вернуть строку из этой DLL?
Обратите внимание, что я использую версию Inno Setup для Unicode. Я также не хочу использовать COM для вызова этой функции, а также для выделения буфера в DLL и возврата его в Inno Setup.