Вызов C ++ из C # Array MarshalAs Проблемы? - PullRequest
1 голос
/ 16 июля 2011

Итак, у меня есть функция внутри библиотеки C ++:

double MyFunc(double** data, int length)
{
    //data elements are accessed like this
    (*data)[i] = 5.0;
}

В C # я получаю доступ к этой функции следующим образом:

//import
[DllImport(@"MYDLL.dll")]
public static extern double MyFunc(ref double[] data, int length);
//usage
MyFunc(ref data, data.Length);

Это глупо, потому что я бы лучше написал:

double MyFunc(double* data, int length)
{
    //data elements are accessed like this
    data[i] = 5.0;
}

Проблема в том, что я не знаю, как я мог получить доступ к требуемой функции C ++ из C # ... Я не очень хорошо разбираюсь в значениях Marshaling ... Как бы я это сделал?

Ответы [ 2 ]

1 голос
/ 16 июля 2011

Если вы спрашиваете, как создать эту такую ​​же функцию в c#, то вы спрашиваете о unsafe коде в C #, проверяйте это и это .

Ваш код будет:

unsafe double MyFunc(double* data, int length)
{
    //data elements are accessed like this
    data[i] = 5.0;
}
1 голос
/ 16 июля 2011

Вы можете просто передать double[] напрямую.

...