Работа с неуправляемой памятью в C#

Я использую родной C++ DLL в C#, как это:

C++ функции:

poly* f1(/*some input data*/);
double* f2(poly* p);

В C# я делаю:

(Это делается с использованием небезопасных и фиксированных блоков соответственно, так что не беспокойтесь об этом)

void* ptr  = f1(/*input data*/);
double[] result = f2(ptr);

Теперь, если я печатаю данные из f2Я получаю некоторые данные повреждены, значения мусора. И некоторые значения верны. Я хочу знать, это из-за сохранения этого в пустом указателе ptr? Или это хорошо, а причина в чем-то другом?

1 ответ

Я предполагаю, что маршаллер не может автоматически конвертировать double* в double[], потому что он не имеет представления о длине массива, и может возникнуть множество других проблем. Вы должны дать нам в идеале хотя бы заголовочный файл на C++, объявление вашего метода DllImported extern в C#, и тогда мы сможем углубиться в это:)

Другие вопросы по тегам