代码之家  ›  专栏  ›  技术社区  ›  G S

Python ctypes:从相对路径加载DLL

  •  23
  • G S  · 技术社区  · 15 年前

    wrapper.py ,它包装了一个C DLL。DLL与模块位于同一文件夹中。因此,我使用以下代码来加载它:

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

    包装器.py

    我的问题是,有没有一种方法可以指定DLL相对于包装器的路径,而不是当前的工作目录?这将使我能够将这两个包装器一起运送,并允许用户从任何地方运行/导入包装器。

    3 回复  |  直到 15 年前
        1
  •  26
  •   Matthew Flaschen    15 年前

    你可以用 os.path.dirname(__file__)

        2
  •  13
  •   fmark    15 年前

    扩展马修的答案:

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

    py2exe .

        3
  •  11
  •   Chris B.    15 年前

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

    请注意,如果您使用py2exe,这是行不通的(因为 __file__ 未设置)。在这种情况下,你需要依靠 sys.executable 属性(在 http://www.py2exe.org/index.cgi/WhereAmI )

        4
  •  0
  •   Shtefan    6 年前

    另一个版本:

    dll_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'MyCDLL.dll')
    myDll = ctypes.CDLL(dll_file)