Работа с неуправляемой памятью в 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#, и тогда мы сможем углубиться в это:)