C++封装函数,输入数组,C#调用

C++代码

extern "C" _declspec(dllexport) double _cdecl SunmDoubles(const double* arr, int length)
{
    double sum = 0.0;
    for (int i = 0; i < length; i++)
    {
        sum += arr[i];
    }
    return sum;
}

C#代码

    [DllImport("ConsoleApplication1.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
    public static extern double SunmDoubles(double[] arr, int length);

  double[] arr = new double[] { 1.1, 2.2, 3.3 };
  var t1 = SunmDoubles(arr, 3);
  MessageBox.Show(t1.ToString());

说明

  • C# 数组默认封送为指向第一个元素的指针(double*)。

  • 不需要 [MarshalAs],因为数组是 double[] 这种 blittable 类型。

  • 必须显式传递长度,因为 C++ 无法从指针获取数组大小。

 

 

如果想传入数组首地址可以这样写

 [DllImport("ConsoleApplication1.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]

 public static extern double SunmDoubles(ref double arr, int length);

 double[] arr = new double[] { 1.1, 2.2, 3.3 };
 var t1 = SunmDoubles(ref arr[0], 3);
 MessageBox.Show(t1.ToString());

使用ref关键字

posted @ 2026-05-30 14:48  家煜宝宝  阅读(7)  评论(0)    收藏  举报