mirror of
https://github.com/moparisthebest/Simba
synced 2024-11-25 02:32:19 -05:00
Array passing works, with copy overhead.
This commit is contained in:
parent
6825eeb179
commit
a103641897
@ -32,6 +32,9 @@ c = Color(DLL)
|
|||||||
ret = c.find((0, 0, 100, 100), 0)
|
ret = c.find((0, 0, 100, 100), 0)
|
||||||
print ret
|
print ret
|
||||||
|
|
||||||
|
ret = c.findAll((0, 0, 100, 100), 0)
|
||||||
|
print ret
|
||||||
|
|
||||||
|
|
||||||
m = Mouse(DLL)
|
m = Mouse(DLL)
|
||||||
|
|
||||||
@ -53,5 +56,4 @@ print m.getPos()
|
|||||||
if hasattr(ret,'__iter__'):
|
if hasattr(ret,'__iter__'):
|
||||||
m.setPos(ret)
|
m.setPos(ret)
|
||||||
|
|
||||||
|
|
||||||
del DLL
|
del DLL
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from ctypes import *
|
from ctypes import *
|
||||||
from mmltypes import isiterable
|
from mmltypes import isiterable
|
||||||
from mmltypes import POINT, PPOINT, PINTEGER
|
from mmltypes import POINT, PPOINT, PINTEGER
|
||||||
|
from mmltypes import PascalArray
|
||||||
|
|
||||||
|
|
||||||
class ColorException(Exception):
|
class ColorException(Exception):
|
||||||
@ -24,7 +25,19 @@ class Color(object):
|
|||||||
self._mc.dll.findColor(byref(x), byref(y), color, *box)
|
self._mc.dll.findColor(byref(x), byref(y), color, *box)
|
||||||
return (x, y)
|
return (x, y)
|
||||||
|
|
||||||
|
def findAll(self, box, color):
|
||||||
|
ptr = PPOINT()
|
||||||
|
self._mc.dll.findColors(byref(ptr), color, *box)
|
||||||
|
arr = PascalArray(POINT, ptr, self._mc)
|
||||||
|
print 'Length:', len(arr)
|
||||||
|
# for i in range(len(arr)):
|
||||||
|
# print i, arr[i].x, arr[i].y
|
||||||
|
return arr
|
||||||
|
|
||||||
def _initialiseDLLFuncs(self):
|
def _initialiseDLLFuncs(self):
|
||||||
self._mc.dll.findColor.restype = c_int
|
self._mc.dll.findColor.restype = c_int
|
||||||
self._mc.dll.findColor.argtypes = [PINTEGER, PINTEGER, c_int, c_int,
|
self._mc.dll.findColor.argtypes = [PINTEGER, PINTEGER, c_int, c_int,
|
||||||
c_int, c_int, c_int]
|
c_int, c_int, c_int]
|
||||||
|
self._mc.dll.findColors.restype = c_int
|
||||||
|
self._mc.dll.findColors.argtypes = [POINTER(PPOINT), c_int, c_int,
|
||||||
|
c_int, c_int, c_int]
|
||||||
|
@ -8,6 +8,33 @@ class POINT(Structure):
|
|||||||
_fields_ = [('x', c_int),
|
_fields_ = [('x', c_int),
|
||||||
('y', c_int)]
|
('y', c_int)]
|
||||||
|
|
||||||
|
class PascalArray(object):
|
||||||
|
def __init__(self, pastype, ptr, MC):
|
||||||
|
self._type = pastype
|
||||||
|
self._p = ptr
|
||||||
|
self._mc = MC
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
self._mc.dll.fpc_freemem_(self._p)
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return cast(self._p, POINTER(c_ulong))[0]
|
||||||
|
|
||||||
|
def __getitem__(self, pos):
|
||||||
|
if pos > len(self):
|
||||||
|
print 'Out of range'
|
||||||
|
return None
|
||||||
|
return cast(self._p, POINTER(self._type))[pos+1]
|
||||||
|
|
||||||
|
def __setitem__(self, pos, item):
|
||||||
|
if pos > len(self):
|
||||||
|
print 'Out of range'
|
||||||
|
return
|
||||||
|
if sizeof(item) != sizeof(self._type):
|
||||||
|
print 'Incorrect structure'
|
||||||
|
return
|
||||||
|
cast(self._p, POINTER(self._type))[pos] = item
|
||||||
|
|
||||||
PPOINT = POINTER(POINT)
|
PPOINT = POINTER(POINT)
|
||||||
PINTEGER = POINTER(c_int)
|
PINTEGER = POINTER(c_int)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user