2013-11-28 1 views
0

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

C++ функции:

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

В C#, я делаю:

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

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

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

+0

Как выглядит объявление f2? Какие данные передаются и выходят из него? – Luaan

+0

Вы также не можете безопасно вызывать эти функции из кода на C++, существует очень серьезная проблема управления памятью. Это не улучшается, когда вы пытаетесь сделать это с C#. –

ответ

0

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