On 05-Oct-16 22:29, Emile van Sebille wrote:
Thanks for the reply!

After a shirt coffeebreak - back into the fray - and I found the following:

+76  class cpu_total:
   +77      def __init__(self):
   +78          __perfstat__ = CDLL("libperfstat.a(shr_64.o)")
   +79          prototype = CFUNCTYPE(c_int, c_void_p, c_void_p, c_int,
c_int)
error #2 - see below
+80          args = (1, "name", None), (2, "buff", None), (1, "size",
0), (1, "count", 1)
error #1. paramater type 2 (the buffer might be where data is being put, but for the call, the pointer is INPUT)
+81          cpu_total = prototype(("perfstat_cpu_total",
__perfstat__), args)
   +82
   +83          buff = perfstat_cpu_total_t()
   +84          cpu_total(buff=buff, size=sizeof(buff))
+85
The error #2 is #2, because only after I corrected the inputs did I get Type Exceptions. I had hoped that c_void_p was a "typeless" type, mainly the right size, but the ctypes interface is more particular when you use the CFUNCTYPE() - so now I have my boilerplate for what I hope can be a tutorial for interfacing - by hand - with complex functions, i.e., using one class as the data aka typedef defintion, and a second class to work
on it.

In template form:

class perfstat_xxx_t:
    _fields_ = ( ... )

class perfstat_xxx:
    def init(self):
_perflib = ctypes.CDLL("libperfstat.a(shr_64.o)") # AIX member in an archive
        _fn_xxx = _perflib.xxx
# ALL AIX perfstat routines have 4 arguments: (name, buff, sizeof_buff, count)
        # the buff is a pointer to where the information will be stored
        _fn = CFUNCTYPE(c_int, c_void_p, POINTER(xxx_t), c_int, c_int)
_args = (1, "name", None), (1, "buff", None), (1, "size", 0), (1, "count", 1)
        _xxx = _fn(("xxx", _fn_xxx), _args)

        _buff = perfstat_cpu_total_t()
        _xxx(buff=_buff, size=sizeof(_buff))
        self._v = _buff

So, the next question/test will be to move the _fields_ into the "second" class definition. I just need to find what "self" attribute that is.

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to