Hello,

I would like to pass a two dimensional array to C function in a dll. I
use ctypes to call the function.

I compile the dll with visual studio 2008 express and my C source code
looks like this.

#include <stdio.h>
#ifdef __cplusplus
extern "C" {  // only need to export C interface if
              // used by C++ source code
using namespace std;
#endif


__declspec(dllexport) int print(double** ptr, int ny, int nx)
{
        int i, j;
        for(i=0; i<ny; i++)
        {
                for(j=0; j<nx; j++)
                {
                        printf("%.3f \t", *(*(ptr+i)+j));
                }
                printf("\n");
        }
        return 0;
}

#ifdef __cplusplus
}
#endif

As you can see the function expects a doube** variable. I tried to
call this function from Python with this code.

import ctypes as ct

matrix = ct.cdll.LoadLibrary('matrix.dll')
getattr(matrix, 'print_matrix')

ptr_type = ct.c_double * 5 * 4
ptr = ptr_type()
matrix.print_matrix(ptr, ct.c_int(4), ct.c_int(5))

I expected to see a matrix showing only zeros since I can address the
single entries in Python by ptr[i][j]. Instead the interpreter returns
with the error message

WindowsError: exception: access violation reading 0x000000
WARNING: Failure executing file: <ctypes_matrix.py>

Furthermore, I am wondering if there is a fast way to use a numpy 2D
array instead or alternatively to cast the ctypes array into a numpy
array.

Has someone an idea to help me?

Thank you very much

Daniel
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to