4

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).

1

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.