Articles of ctypes

ctypes – matriz numpy sin forma?

Estoy usando un envoltorio de python para llamar a las funciones de una biblioteca dll de c ++. La biblioteca dll devuelve un ctype, que convierto a una matriz numpy score = np.ctypeslib.as_array(score,1) Sin embargo, la matriz no tiene forma? score >>> array(-0.019486344729027664) score.shape >>> () score[0] >>> IndexError: too many indices for array ¿Cómo […]

Excepción de captura de tipos

Estoy jugando un poco con ctypes y C / C ++ DLL Tengo una dll de “matemáticas” bastante simple double Divide(double a, double b) { if (b == 0) { throw new invalid_argument(“b cannot be zero!”); } return a / b; } Hasta ahora, el único problema que funciona es que obtengo una excepción de […]

Compartiendo una variable entre procesos.

Tengo una función de descarga que descarga varios archivos de forma paralela. Uso multiprocessing.Pool.map_async para descargar diferentes fragmentos del mismo archivo. Me gustaría mostrar una barra de estado de la descarga. Para esto, necesito saber el total de bytes que ya se han descargado ( total_bytes_dl ). pool = multiprocessing.Pool(processes) mapObj = pool.map_async(f, args) while […]

¿Es ctypes.c_long de Python de 64 bits en sistemas de 64 bits?

En C, el largo es de 64 bits en un sistema de 64 bits. ¿Esto se refleja en el módulo de ctypes de Python?

Ctypes: forma rápida de convertir un puntero de retorno a una matriz o lista de Python

Estoy usando ctypes para pasar un puntero de matriz a una dll y devolver un puntero a una matriz de dobles que se creó usando malloc en la dll. Al regresar a Python, necesito una forma rápida de convertir el puntero a una matriz o lista de Python. Puedo usar esta lista de comp, pero […]

Llamando funciones devueltas como punteros desde otras funciones en ctypes

Estoy tratando de usar ctypes para llamar a la función de CA que se devolvió como un puntero de otra función. De la documentación parece que puedo hacer esto declarando la función con CFUNCTYPE y luego creando una instancia usando el puntero. Esto, sin embargo, parece darme un segfault. Aquí hay un código de ejemplo. […]

llamando a c desde python con ctypes: vectores de paso

Quiero llamar a la función ac desde python usando ctypes. De la documentación no entiendo cómo pasar puntero a vectores. La función que quiero llamar es: double f(int n, double* x) { int i; double p=1; for (i=0; i< n; i ++) p = p * x[i]; return p; } He modificado la función con […]

Python ctypes pragma pack para lectura de byte alineado

Tengo una aplicación de C ++ con la siguiente estructura escrita en el archivo. Ahora necesito descomprimirlos usando python. El problema básico aquí es cómo reflejar la opción del pragma pack en python. Estructura de C ++ #pragma pack(1) struct abc { unsigned char r1; unsigned char r2; unsigned char p1; unsigned int id; }; […]

Uso de locking de subprocesos en la función de callback ctypes

Quiero usar un dll ctypes de una aplicación torcida. Minimo ejemplo fabricado aquí: from ctypes import * from threading import Lock lock = Lock() dll = windll.LoadLibrary(‘mydll.dll’) l = [1,2,3] def callback(): lock.acquire() l.pop() lock.release() return 0 C_CALLBACK = CFUNCTYPE(c_int) c_callback = C_CALLBACK(callback) # this is a non blocking function call starts a hardware task […]

¿Cómo compilo una cadena de python a partir de un búfer ctype en bruto (binario)?

Estoy jugando con Python y ctypes y no puedo averiguar cómo resolver este problema. Llamo a una función C que llena un dato binario en bruto. Mi código se ve así: class Client(): def __init__(self): self.__BUFSIZE = 1024*1024 self.__buf = ctypes.create_string_buffer(self.__BUFSIZE) self.client = ctypes.cdll.LoadLibrary(r”I:\bin\client.dll”) def do_something(self): len_written = self.client.fill_raw_buffer(self.__buf, self.__BUFSIZE) my_string = repr(self.__buf.value) print my_string […]