调用dll文件出错

背景:c++自定义创建dll,依赖于gda201.dll(如何创建dll的部分略),并提供给python调用

Objdll = ctypes.cdll.LoadLibrary(‘D:\ge\testDLL\x64\Debug\testDLL.dll’) # 此处建议绝对路径

报错信息:

Traceback (most recent call last):
File “E:\PyCharm 2017.3.4\helpers\pydev\pydev_run_in_console.py”, line 53, in run_file
pydev_imports.execfile(file, globals, locals) # execute the script
File “E:\PyCharm 2017.3.4\helpers\pydev_pydev_imps_pydev_execfile.py”, line 18, in execfile
exec(compile(contents+"\n", file, ‘exec’), glob, loc)
File “D:/ProJect/PyCharm/DataPrepare/testDLL.py”, line 7, in
Objdll = ctypes.cdll.LoadLibrary(‘D:\ge\testDLL\x64\Debug\testDLL.dll’)
File “C:\Python36\lib\ctypes_init_.py”, line 426, in LoadLibrary
return self.dlltype(name)
File "C:\Python36\lib\ctypes_init
.py", line 348, in init
self._handle = _dlopen(self._name, mode)

OSError: [WinError 126] 找不到指定的模块。

很显然,错误的原因在于testDLL.dll依赖于gda201.dll,而Python 进程没有找到

单纯将这两个dll文件放在同一目录下是没有作用的,因为Python进程起始路径并不是testDLL.dll的目录。

网上的建议是在系统环境的 path 里面里面加入 dll 的目录,或者把这些 dll 都一起复制到 Python.exe 所在的目录。但是我觉得不妥,虽然暂时解决了问题,但是若是将testDLL.dll交给其他环境使用时一样会出问题。

解决方案其实非常简单,修改当前的工作路径即可。

解决方案:

增加语句os.chdir(‘D:\ge\testDLL\x64\Debug\’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这是一个Python代码片段,用于执行指定的Python脚本文件。参数"file"是脚本文件的路径,"globals"和"locals"是字典类型的变量,用于指定脚本执行的全局和局部命名空间。 具体来说,"globals"参数是一个全局命名空间的字典,其中包含了可在脚本中访问的全局变量。"locals"参数是一个局部命名空间的字典,其中包含了可在脚本中访问的局部变量。 这个函数通常用于在一个Python脚本中执行另一个Python脚本,或者在交互式Python解释器中执行脚本文件。但是需要注意的是,在某些情况下,使用这个函数可能会带来安全风险,因为它可以执行任意的Python代码。 ### 回答2: 在Python开发中,pydev_imports.execfile(fileglobals,locals)是一个非常重要的函数。在使用Python进行开发时,通常会将代码分为一个个的模块,然后在需要时进行导入,这样可以提高代码的复用性和维护性。但有时,我们需要在运行时动态地调用一个模块,这时就需要使用execfile函数。 pydev_imports.execfile(fileglobals,locals)这个函数主要用于执行指定的Python代码文件。其中,file是一个字符串,它代表要执行的Python代码文件的路径。而globals和locals则是可选参数。globals参数用于传递全局变量,而locals参数用于传递局部变量。当使用这两个参数时,函数会自动将传入的字典对象中的变量作为执行代码的全局变量和局部变量。 使用pydev_imports.execfile函数可以让我们在运行时加载模块,实现更加灵活的操作。比如,在某些场景下,我们需要根据用户的输入来加载不同的模块,这时就可以使用execfile函数来动态地加载模块。另外,在编写一些工具函数时,也可以使用这个函数来动态地执行一些特定的代码文件。 需要注意的是,在使用execfile函数时,要确保被执行的代码文件是可信的,否则可能会带来潜在的安全漏洞。此外,由于execfile会直接执行代码文件中的内容,因此在引用外部库时,需要确保这些库已经被正确地导入至代码环境中。 ### 回答3: pydev_imports.execfile(file, globals, locals)是一个用于执行指定python脚本的函数。其可以在程序运行时动态执行给定的python文件,并将其中的全局变量和局部变量传递给该函数。 这个函数包含了三个参数: 1. file:指定需要被执行的python文件路径。 2. globals:指定全局变量的字典,用于存储被执行的脚本文件中的全局变量。在脚本执行完后,这些变量会存储在该字典中。 3. locals:指定局部变量的字典,用于存储被执行的脚本文件中的局部变量。在脚本执行完后,这些变量会存储在该字典中。 该函数实现了用Python语言解释执行Python代码的功能,并将结果在全局和局部变量中保存,方便用户调用并查看结果。 总之,pydev_imports.execfile(file, globals, locals)是一个非常有用的函数,它使得用户可以在程序中很方便地调用并执行已经存在的python脚本,并将全局和局部变量存储在字典中,以方便后续的操作和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值