programar - python tutorial
¿Cómo puedo llamar a un archivo DLL desde un lenguaje de scripting? (5)
En Perl, P5NCI también hará eso, al menos en algunos casos. Pero me parece que todo lo que utilizas que gestiona directamente la interfaz con el dll va a ser hostil para el usuario, y si vas a tener un envoltorio amigable del usuario (scriptor?), También podría ser un módulo XS.
Supongo que no veo una distinción significativa entre "compilar y enviar ejecutables" y "compilar y enviar scripts".
Tengo un producto de terceros, un emulador de terminal, que proporciona una DLL que se puede vincular a un programa C para básicamente automatizar la conducción de este producto (enviar pulsaciones de teclas, detectar lo que está en la pantalla, etc.).
Quiero conducirlo desde un lenguaje de scripting (me siento cómodo con Python y un poco menos con Perl) para que no tengamos que compilar y enviar ejecutables a nuestros clientes cada vez que se encuentre un problema.
También queremos que los clientes puedan escribir sus propios guiones utilizando los nuestros como líneas de base y no tendrán en cuenta la idea de escribir y compilar el código C.
¿Cuál es una buena forma de hacer que Python / Perl interactúen con una DLL de Windows? Mi primer pensamiento fue escribir un programa de servidor y tener una secuencia de comandos de Python para comunicarse con él a través de TCP, pero tiene que haber una solución más fácil.
En Perl, Win32 :: API es una forma fácil de interactuar con archivos DLL. También está Inline :: C , si tiene acceso a un compilador y a los encabezados de Windows.
Perl XSUB s también puede crear una interfaz entre Perl y C.
Para Python, puede compilar una extensión que enlaza con el archivo DLL, para que en Python pueda importarlo como un módulo normal. Puede hacerlo a mano, utilizando una biblioteca como Boost.Python, o usando una herramienta como SWIG (que también admite Perl y otros lenguajes de scripting) para generar un contenedor automáticamente.
La función Python Py_InitModule API le permite crear un módulo de funciones c / c ++ que luego puede ser llamado desde Python.
Se necesitan alrededor de una docena de líneas de código c / c ++ para lograrlo, pero es bastante fácil escribir un código:
El editor de Zeus que escribí utiliza esta herramienta para permitir que las macros de Zeus se escriban en Python y funciona muy bien.
Una forma de llamar a las bibliotecas C desde Python es usar ctypes :
>>> from ctypes import *
>>> windll.user32.MessageBoxA(None, "Hello world", "ctypes", 0);