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关键字

浙公网安备 33010602011771号