Следуйте этому руководству here, но не получится. Ошибка адресной памяти.Возвратите массив String в C# и получите delphi [Interop]
Я пытаюсь это нравится, а не я ошибка памяти, но возвращает NULLS
код Delphi:
interface
procedure getValores(samples: array of string); stdcall; external 'myDll.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
vet :array[0..400] of string;
begin
getValues(vet);
Layout('',vet);
end;
end.
Кодекс C#
[DllExport(CallingConvention = CallingConvention.Cdecl)]
public static void getValores(
[Out]
[MarshalAs(UnmanagedType.LPArray,
ArraySubType=UnmanagedType.LPWStr, SizeConst=400)]
String[] test
)
{
if (test == null)
{
MessageBox.Show("null");
return;
}
MessageBox.Show("Recive" + test.Length);
for(int i = 0; i < test.Length; i++)
test[i] = "test";
return;
}
кто-то прошел через это проблема?
Спасибо
Много способов. Этот код не может работать. Массивы и строки в Delphi не являются безопасными для Интерпола. Ваш код даже не работает, если он был чистым Delphi, потому что вы передаете массив по значению. Вы можете кодировать список как JASON, например. Или вы можете вернуть одну строку за раз. –
Или вы могли бы просто сделать то, что ответ на вопрос, который вы связали с рекомендациями. Почему бы вам не следовать советам и составить свой собственный код вне меня. –
Возвращение строки за раз - хорошая идея. Я буду тестировать завтра. Tks –