es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 –>

relations

  1. 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')
  1. en el archivo td_api.py
# -*- coding:utf-8 -*-
from jg_api.jgtradeapi import *
  1. 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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Explicación del error

    El error FileNotFoundError ocurrió al ejecutar main.py porque la ruta especificada para jgtradeapi en jg_api_func_def.py era relativa al directorio de trabajo actual. Por lo tanto, cuando se ejecutaba main.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 error FileNotFoundError, pero se produjo un error OSError, que indicaba una dependencia faltante o incompatible.

    Solución

    Para solucionar este problema, necesitamos proporcionar la ruta completa para el archivo JGTradeApi.dll en jgtrade_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:

    import os
    jgtradeapi_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'lib', 'td', 'JGTradeApi.dll'))
    jgtradeapi = windll.LoadLibrary(jgtradeapi_path)
    

    En este código, os.path.dirname(__file__) obtiene el directorio del archivo actual (jgtrade_api_func_def.py). Luego, se utiliza os.path.join para construir la ruta completa de JGTradeApi.dll. Finalmente, se utiliza os.path.abspath para obtener la ruta absoluta del archivo, que se puede pasar a windll.LoadLibrary.

    Con esta modificación, main.py debería poder cargar jgtradeapi correctamente. Si el error OSError persiste, puede ser necesario investigar las dependencias de JGTradeApi.dll para asegurarse de que todas estén disponibles y sean compatibles.

Comments are closed.