从C#Array Marshal调用C ++出现问题?

时间:2011-07-15 23:47:12

标签: c# c++ dll marshalling

所以我在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 个答案:

答案 0 :(得分:1)

您可以直接传递double[]

答案 1 :(得分:1)

如果您正在询问如何在c#中创建相同功能,那么您在C#check this和{{}中询问unsafe代码3}}

您的代码将是:

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