python3.8 cargar dll OSError: [WinError 127] No se pudo encontrar el procedimiento especificado
(env: windows10-64, python3.8.8)
La relación CALL es –>
- en el archivo jgtrade_api_func_def.py
#!/usr/bin/env python
# coding:utf-8
from ctypes import *
jgtradeapi = windll.LoadLibrary('lib/td/JGTradeApi.dll')
- en el archivo td_api.py
# -*- coding:utf-8 -*-
from jg_api.jgtradeapi import *
- en main.py
from jg_api.td_api import JGTradeApi
Cuando ejecuto td_api.py, funciona bien
Cuando ejecuto main.py, ocurre FileNotFoundError
Archivo “D:\work\WCJGClient\jg_api\jgtradeapi_func_def.py”, línea 14, en
jgtradeapi = windll.LoadLibrary(‘lib/td/JGTradeApi.dll’)
Archivo “D:\ProgramData\Anaconda3\lib\ctypes_init.py”, línea 459, en LoadLibrary
return self.dlltype(name)
Archivo “D:\ProgramData\Anaconda3\lib\ctypes_init.py”, línea 381, en init
self.handle = _dlopen(self.name, mode)
FileNotFoundError: No se pudo encontrar el módulo ‘D:\work\WCJGClient\lib\td\JGTradeApi.dll’ (o una de sus dependencias). Intente usar la ruta completa con la sintaxis del constructor.
Luego cambié la ruta a windll.LoadLibrary(‘jg_api/lib/td/JGTradeApi.dll’) y cambió el error
Archivo “D:\work\WCJGClient\jg_api\jgtradeapi_func_def.py”, línea 14, en
jgtradeapi = windll.LoadLibrary(‘jg_api/lib/td/JGTradeApi.dll’)
Archivo “D:\ProgramData\Anaconda3\lib\ctypes_init.py”, línea 459, en LoadLibrary
return self.dlltype(name)
Archivo “D:\ProgramData\Anaconda3\lib\ctypes_init.py”, línea 381, en init
self.handle = _dlopen(self.name, mode)
OSError: [WinError 127] No se pudo encontrar el procedimiento especificado.
También intenté usar una ruta absoluta, pero reportó el mismo error. ¿Alguien ha tenido este problema antes?
davy.ai
Explicación del error
El error
FileNotFoundError
ocurrió al ejecutarmain.py
porque la ruta especificada parajgtradeapi
enjg_api_func_def.py
era relativa al directorio de trabajo actual. Por lo tanto, cuando se ejecutabamain.py
desde un directorio diferente, no se encontraba el archivo.Cuando la ruta se cambió posteriormente a
jg_api/lib/td/JGTradeApi.dll
, se solucionó el errorFileNotFoundError
, pero se produjo un errorOSError
, que indicaba una dependencia faltante o incompatible.Solución
Para solucionar este problema, necesitamos proporcionar la ruta completa para el archivo
JGTradeApi.dll
enjgtrade_api_func_def.py
. Esto garantizará que el archivo se pueda encontrar independientemente del directorio de trabajo.Una forma de lograr esto es utilizar el módulo
os
para obtener la ruta absoluta del archivo. Aquí hay un ejemplo:En este código,
os.path.dirname(__file__)
obtiene el directorio del archivo actual (jgtrade_api_func_def.py
). Luego, se utilizaos.path.join
para construir la ruta completa deJGTradeApi.dll
. Finalmente, se utilizaos.path.abspath
para obtener la ruta absoluta del archivo, que se puede pasar awindll.LoadLibrary
.Con esta modificación,
main.py
debería poder cargarjgtradeapi
correctamente. Si el errorOSError
persiste, puede ser necesario investigar las dependencias deJGTradeApi.dll
para asegurarse de que todas estén disponibles y sean compatibles.