windll c_int python ctypes

c_int - Python ctypes: carga de DLL desde una ruta relativa



c_int() (3)

Ampliando la respuesta de Mateo:

import os.path dll_name = "MyCDLL.dll" dllabspath = os.path.dirname(os.path.abspath(__file__)) + os.path.sep + dll_name myDll = ctypes.CDLL(dllabspath)

Esto solo funcionará desde un script, no desde la consola ni desde py2exe .

Tengo un módulo Python, wrapper.py , que envuelve una DLL de C. La DLL se encuentra en la misma carpeta que el módulo. Por lo tanto, utilizo el siguiente código para cargarlo:

myDll = ctypes.CDLL("MyCDLL.dll")

Esto funciona si ejecuto wrapper.py desde su propia carpeta. Si, sin embargo, lo ejecuto desde otro lugar, falla. Esto se debe a que ctypes calcula la ruta relativa al directorio de trabajo actual.

Mi pregunta es, ¿hay alguna forma en que pueda especificar la ruta de la DLL en relación con el contenedor en lugar del directorio de trabajo actual? Eso me permitirá enviar los dos juntos y le permitirá al usuario ejecutar / importar la envoltura desde cualquier lugar.


Puede usar os.path.dirname(__file__) para obtener el directorio donde se encuentra el archivo fuente de Python.


Siempre agrego el directorio donde está mi DLL a la ruta. Eso funciona:

os.environ[''PATH''] = os.path.dirname(__file__) + '';'' + os.environ[''PATH''] windll.LoadLibrary(''mydll.dll'')

Tenga en cuenta que si usa py2exe, esto no funcionará (porque __file__ no está configurado). En ese caso, debe confiar en el atributo sys.executable (instrucciones completas en http://www.py2exe.org/index.cgi/WhereAmI )