Я использую родной 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
? Или это хорошо, а причина в чем-то другом?
Я предполагаю, что маршаллер не может автоматически конвертировать double * в double [], потому что он не имеет представления о длине массива, и может возникнуть множество других проблем. Вы должны дать нам в идеале хотя бы заголовочный файл на C ++, объявление вашего метода DllImported extern в C #, и тогда мы сможем углубиться в это 🙂
Других решений пока нет …