C# Unmanaged Exports of array to python


I am using Robert Giesecke's DLLExport library to allow me to export a c# dll that can be accessed by a python application. I have figured out how to call for basic types, such as integers, double and strings, but I also need to return arrays of strings or integers back from the c# dll to python.

I tried defining it like:

[DllExport("Test7", System.Runtime.InteropServices.CallingConvention.Cdecl)]
public static int[]  Test7()
        Random rnd = new Random();
        int[] info = new int[10];
        for (int i = 0; i < 10; i++)
            info[i] = Convert.ToInt32(Math.Round(Convert.ToDecimal(rnd.Next()), 0));

        return info; 

I also tried to use the example from the "Unmanaged Exports with Arrays" topic, with my c# code being:

[DllExport("Test8", System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public static void Test8(int length, out IntPtr info)
            Random rnd = new Random();
            int[] valList = new int[length];
            for (int i = 0; i < length; i++)
                valList[length] = Convert.ToInt32(Math.Round(Convert.ToDecimal(rnd.Next()), 0));

            info = Marshal.AllocHGlobal(valList.Length * Marshal.SizeOf(typeof(int)));
            Marshal.Copy(valList, 0, info, length);

The basic test function is to create an integer array of a length provided by the function, and to return the value back to the caller.

On the python side, I have a simple code to test:

import os
import ctypes
import numpy as np
output = ctypes.CDLL(".\\pythontstl.dll").Test7(10)

and I tried

  array_holder = ctypes.ARRAY()
  output = ctypes.CDLL(".\\pythontst1.dll").Test8(10,array_holder)

In both cases, I get an OSError: [WinError -532462766] Windows Error 0xe0434352. I am learning python so it may be a syntax or call that I might be missing, but the output = ctypes.CDLL(".\pythontst1.dll").Test6('hello') code works and returns a string (along with the other test functions I have for the primitives).

asked on Stack Overflow Dec 12, 2017 by user3047431

0 Answers

Nobody has answered this question yet.

User contributions licensed under CC BY-SA 3.0