[prev in list] [next in list] [prev in thread] [next in thread] 

List:       python-capi-sig
Subject:    [capi-sig] (no subject)
From:       sagar masuti <sagar.masuti () gmail ! com>
Date:       2014-03-22 16:50:24
Message-ID: CAE-iVQh72nkf+VbA8gSU6s+PfxwUBjq-A-TarpXPaDf+sXhY2Q () mail ! gmail ! com
[Download RAW message or body]

Is it possible to cast an int to a class type ?

I have the following code in c:

#include "Python.h"


#define PYTHON_FILENAME "modelparam"


void getmodelparam(int pModelParam) ;


typedef struct {

  int seconds;

  int nanoseconds;

} someTime;



int main ()

{

someTime *pSome ;

int a ;

printf ("Testing the python interfaces\n") ;


pSome = (someTime *) calloc(1, sizeof(someTime)) ;

 pSome->seconds = 10 ;

pSome->nanoseconds = 20 ;

 a = (int) pSome ;

printf ("a is %d, pSome is %d\n", a, pSome) ;

 getmodelparam(a) ;


printf ("After the python call values are : %d, %d\n",pSome->seconds,
pSome->nanoseconds) ;

 return 0 ;


}

void getmodelparam(int pModelParam)

{

PyObject *pName ;

PyObject *pModule ;

PyObject *pDict ;

PyObject *pFunc ;

int iSize = 0 ;

char pcFunctionName[] = "modifymodelparam" ;

 double dTemp1, dTemp2 ;


/* Initialize the python interpreter */

Py_Initialize() ;

 /* Get Python code/module */

pName = PyUnicode_FromString(PYTHON_FILENAME);

if (NULL != pName)

{

/* Import the module equivalent to doing 'import calresidual' in python */

pModule = PyImport_Import(pName);

Py_DECREF(pName) ;

if (NULL != pModule)

{

/* Get the function and check if its callable function */

pFunc = PyObject_GetAttrString(pModule, pcFunctionName);

if (pFunc && PyCallable_Check(pFunc))

{

/* Build the input arguments */

PyObject *pResult = PyObject_CallFunction(pFunc,"i", pModelParam) ;

}

else

{

printf ("Some error with the function\n") ;

}

}

else

{

printf ("Couldnt load the module %s\n", PYTHON_FILENAME) ;

}

}

else

{

printf ("Couldnt convert the name of the module to python name\n") ;

}

/* Release the resources. */

Py_DECREF(pModule) ;

Py_DECREF(pFunc) ;

Py_DECREF(pName) ;

 /*Release the interpreter */

Py_Finalize() ;

}


And in python modelparam.py i have :


import ctypes

class someTime(ctypes.Structure):

     _fields_ = [("seconds", ctypes.c_uint),

                 ("nanoseconds", ctypes.c_uint)]


def modifymodelparam(m):

    # Not sure how to access internal elements using m ??

    # How to typecast m ??

    n = someTime(m)

    print ('Seconds', n.seconds)


How can I typecast the address passed from C to a class type in python so
that i can access those class parameters or indirectly saying accessing the
structure parameters?
_______________________________________________
capi-sig mailing list
capi-sig@python.org
https://mail.python.org/mailman/listinfo/capi-sig
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic