Работа с неуправляемой памятью в 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? Или это хорошо, а причина в чем-то другом?

0

Решение

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]