将数据从C ++ DLL中编写的C ++方法返回到C#

时间:2013-05-09 11:47:13

标签: c# c++ dll marshalling

我可以返回一个例如从C ++ DLL中编写的C ++方法加倍到C#

C ++方

__declspec(dllexport) double GetData()
{
    double data = 5;

    return data;
}

C#side

[DllImport("data_acquisition_sys.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern double GetData();
double data = GetData();

但是如果我想像上面那样返回double *或double []的数组,只需更改返回值

__declspec(dllexport) double* GetData()  //C++
public static extern double[] GetData(); //C#

我收到以下错误

  

未处理的异常:System.Runtime.InteropServices.MarshalDirectiveException:无法封送“返回值”:无效的托管/非托管类型组合。

1 个答案:

答案 0 :(得分:1)

在这里,您可以找到如何从本机环境到托管环境p / invoke数组的示例:

进一步阅读有关数组传递的信息: