использование freememory делает непонятно что, ошибок не выдает, но код идущий после этого вызова не выполняется
какие-то проблемы с питоновским 'bytes' ?
В документации есть описание данной функции и ее сигнатуры. Функция выполняеточистку памяти, выделенной библиотекой. Возвращаемое значение - bool, параметр - unsigned char*.
Проблемы с написанием кода в питоне:
использование freememory делает непонятно что, ошибок не выдает, но код идущий после этого вызова не выполняется
какие-то проблемы с питоновским 'bytes' ?
dll = ctypes.WinDLL("txmlconnector64.dll")
def callback(incoming_msg):
print(etree.tostring(etree.XML(incoming_msg), pretty_print=True, encoding="utf-8").decode())
dll.FreeMemory(incoming_msg)
callbackPrototype = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.c_char_p)
callbackPtr = callbackPrototype(callback)
В приведенном примере нет кода после dll.FreeMemory(incoming_msg).
вообще есть у кого-то хоть какието работающие примеры на питоне?
приходится извращаться с ctypes без особого понимания, что во что конвертируется...
документация отвратительная, примеры только на # - там сидеть копаться днями чтобы понять что к чему
TXmlConnector написан на C++ под Windows. Код на C#, Python и Java - авторское видение и адаптация под нужный автору язык.
Пример авторского видения:
def __init__(self, path):
self.__ucallback = None
self.lib = windll.LoadLibrary(path)
self.__SetFunctions()
self.__SetCallback(self.__xcallback)
def __SetFunctions(self):
self.func_init = self.lib.Initialize
self.func_init.restype = c_void_p
self.func_uninit = self.lib.UnInitialize
self.func_uninit.restype = c_void_p
self.func_set_callback = self.lib.SetCallback
self.func_set_callback.restype = c_bool
self.func_send_cmd = self.lib.SendCommand
self.func_send_cmd.restype = c_void_p
self.func_free_mem = self.lib.FreeMemory
self.func_free_mem.restype = c_bool
self.func_service_info = self.lib.GetServiceInfo
self.func_service_info.restype = c_int
def SetUserCallback(self, fun) :
self.__ucallback = fun
def __SetCallback(self, func) :
prototype = WINFUNCTYPE(c_bool, POINTER(c_ubyte))
self.__callback_func = prototype(self.__xcallback)
res = self.func_set_callback(self.__callback_func)
if (not res) :
print("Failed to set callback")
def __xcallback(self, data):
py_data = cast(data, c_char_p).value.decode(XC_ENCODING)
self.func_free_mem(data)
if (not self.__ucallback == None) :
self.__ucallback(py_data)
return 0