Я использую Unmanaged Exports NuGet от Роберта Giesecke и имеют следующий метод в C#:Возвращение строки массив из C# для установки Inno
[DllExport("DummyMethod", CallingConvention = CallingConvention.StdCall)]
public static void DummyMethod(
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] out string[] test, out int count)
{
count = 3;
test = new[] {"test1", "test2", "test3"};
}
В Setup Inno Это мой код:
[Code]
procedure DummyMethod(out Test: TArrayOfString; out Count: Integer);
external '[email protected]:MyDll.dll stdcall';
procedure InitializeWizard();
var Test : TArrayOfString;
var Count : Integer;
begin
DummyMethod(Test, Count);
MsgBox(Test[0], mbError, MB_OK);
end;
По какой-то причине Count
всегда 0, а Test
всегда пуст.
Я ознакомился с несколькими примерами, но не смог найти тот, где Inno Setup выбирает строковый массив из C# DLL.
Ваш ответ был полезен, и предоставленный код работает отлично. Преобразование из строки [] в char ** действительно имеет смысл. У меня не было большого опыта работы с такими установками, и мои знания за пределами управляемого кода довольно ограничены. Мне пришлось переключиться с не-unicode на unicode Inno Setup, но я считаю, что это хорошо! :) – breez