Articles of ctypes

pasando c ++ doble puntero a python

Podría pasar una matriz de una dimensión a python como abajo. y me pregunto si puedo pasar la matriz de doble puntero c ++ a python usando ctypes, numpy. test.cpp: #include extern “C” void cfun(const void * indatav, int rowcount, int colcount, void * outdatav); void cfun(const void * indatav, int rowcount, int colcount, void […]

Cómo enumerar módulos en Python 64bit

Tengo un bloque de código que funciona muy bien en 32 bits, y estoy tratando de hacerlo funcionar también en 64 bits. Cuando se ejecuta el proceso, el tamaño de (estructura) parece estar devolviendo opciones no válidas, y la estructura no se está rellenando correctamente para 64 bits. ¿Qué necesito hacer para que esta función […]

ctypes estructuras de longitud variable

Desde que leí la publicación de Dave Beazley sobre el manejo de E / S binario (http://dabeaz.blogspot.com/2009/08/python-binary-io-handling.html) he querido crear una biblioteca de Python para un cierto Protocolo de cable. Sin embargo, no puedo encontrar la mejor solución para estructuras de longitud variable. Esto es lo que quiero hacer: import ctypes as c class Point(c.Structure): […]

¿Se puede hacer que Python reciba una matriz de cadena de longitud variable desde C #?

Esto puede ser una pista falsa, pero mi versión sin matriz se ve así: DO# using RGiesecke.DllExport; using System.Runtime.InteropServices; namespace Blah { public static class Program { [DllExport(“printstring”, CallingConvention = CallingConvention.Cdecl)] [return: MarshalAs(UnmanagedType.AnsiBStr)] public static string PrintString() { return “Hello world”; } } } Pitón import ctypes dll = ctypes.cdll.LoadLibrary(“test.dll”) dll.printstring.restype = ctypes.c_char_p dll.printstring() Estoy […]

Python: convertir cadenas para usar con ctypes.c_void_p ()

dado una cadena: msg=”hello world” ¿Cómo puedo definir esto como un tipo de datos ctypes.c_void_p() ? el siguiente código produce una excepción “no se puede convertir a puntero”: data=ctypes.c_void_p(msg) se requiere que los data sean un tipo void* en C, porque se pasa a una DLL. Supongo que hay una manera de empaquetar / desempaquetar […]

Objetos de Python como datos de usuario en funciones de callback de ctypes

La función C myfunc opera en una gran cantidad de datos. Los resultados se devuelven en fragmentos a una función de callback: int myfunc(const char *data, int (*callback)(char *result, void *userdata), void *userdata); Usando ctypes , no es gran cosa llamar a myfunc desde el código de Python, y hacer que los resultados se devuelvan […]

¿Qué está haciendo que este descriptor de seguridad vaya mal?

Estoy tratando de leer el acceso para archivos y directorios en Windows usando este código (modelado después del parche propuesto por Tim Golden para os.access para que se lea desde las ACL en Windows ): from ctypes import( windll, wintypes, c_char_p, c_void_p, byref ) from win32api import GetCurrentThread from win32security import ( GetFileSecurity, DACL_SECURITY_INFORMATION, ImpersonateSelf, […]

¿Por qué necesito __declspec (dllexport) para que algunas funciones sean accesibles desde ctypes?

Así que estoy aprendiendo a usar el módulo de ctypes de Python. Aquí está el archivo C simple que compilé con gcc -shared (versión 4.8) en Windows para obtener una muestra .dll: #include int addition(int a, int b){ return a+b; } Ahora puedo acceder desde Python de esta manera: >>>from ctypes import * >>>mylibc = […]

Python ctypes argumentos de errores

Escribí una dll de prueba en C ++ para asegurarme de que las cosas funcionen antes de comenzar a usar una dll más importante que necesito. Básicamente toma dos dobles y las agrega, luego devuelve el resultado. He estado jugando y con otras funciones de prueba he conseguido que las devoluciones funcionen, simplemente no puedo […]

Tipos de Python y argumentos insuficientes (faltan 4 bytes)

La función que estoy tratando de llamar es: void FormatError (HRESULT hrError,PCHAR pszText); de un dll personalizado usando windll. c_p = c_char_p() windll.thedll.FormatError(errcode, c_p) Resultados en: ValueError: Procedure probably called with not enough arguments (4 bytes missing) Usar cdll en su lugar aumenta el contador de bytes faltantes a 12. errcode anterior es el código […]