Anyone know of a better way of passing arrays from Python to a C# DLL without having to resort to unsafe C# code, and preferably using native C# arrays? Also, is there a better or cleaner way of creating the array types in Python that needed to be passed to the C# DLL without having to instantiate each element?
I'm calling a C# library from python as shown here: Calling a C# library from python. Here's my current C# DLL code:
using System.Runtime.InteropServices;
using RGiesecke.DllExport;
namespace TestLib
{
    public class TestLib
    {
        [DllExport("running_sum", CallingConvention = CallingConvention.Cdecl)]
        unsafe public static int running_sum(double* running_sum, int n, double* values)
        {
            // check for errors and return error code
            if (n <= 0 || running_sum == null || values == null)
                return 1;
            running_sum[0] = values[0];
            int i = 1;
            while (i < n)
            {
                running_sum[i] = running_sum[i - 1] + values[i];
                i++;
            }
            // return success
            return 0;
        }
    }
}
Here's my Python 3.4 code calling this C# DLL:
import ctypes
library = ctypes.cdll.LoadLibrary('../TestLib/TestLib')
values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
running_sum_c = ctypes.ARRAY(ctypes.c_double, len(values))()
values_c = ctypes.ARRAY(ctypes.c_double, len(values))()
for i in range(len(values)):
    values_c[i] = values[i]
print('running sum return code: ', library.running_sum(running_sum_c, len(values), values_c))
print('result: ', list(running_sum_c))
 
    