Я не могу понять, как вернуть массив из экспортированной библиотеки C++ в мою программу на C#. Единственное, что я нашел в googling, это использовать Marshal.Copy(), чтобы скопировать массив в буфер, но это не дает мне значения, которые я пытаюсь вернуть, я не знаю, что это дает мне.Возвращает массив C++ в C#
Вот что я пытался:
экспортируемой функции:
extern "C" __declspec(dllexport) int* Test()
{
int arr[] = {1,2,3,4,5};
return arr;
}
C# часть:
[DllImport("Dump.dll")]
public extern static int[] test();
static void Main(string[] args)
{
Console.WriteLine(test()[0]);
Console.ReadKey();
}
Я знаю, что возвращаемый тип INT [], вероятно, неправильно из-за управляемые/неуправляемые различия, я просто не знаю, куда идти отсюда. Кажется, я не могу найти ответ ни о чем, но возвращать массивы символов в строки, а не целые массивы.
Я понял, что значения, которые я получаю с Marshal.Copy, не те, что я возвращаю, потому что массив arr в экспортируемой функции удаляется, но я не уверен на 100%, если кто-то может прояснить это, что было бы здорово.
http://stackoverflow.com/questions/3776485/marshal-c-int-array-to-c-sharp Это может помочь вам –
[Не хорошо.] (Http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope) – chris
Спасибо, Крис, я был так напуган, что забыл, что я делаю. Я собираюсь немного изменить свой код, таким образом, у меня есть экспортированная функция в адресе в буфер и заполнить буфер оттуда. – David