7

我们如何让 ctypes.CDLL("jvm.dll") 找不到 dll 并且不给出“找不到模块”错误?

我们已经验证了路径,并且可以通过 jvm.dll 的文件“打开”命令获取它们——但是当给 ctypes 时完全相同的路径会给出“找不到模块”错误。

我们还尝试根据此答案编辑注册表项。

我们还尝试使用 32 位版本的 Java 运行 32 位版本的 Python 以及尝试 64 位版本。

我们正在 Windows Server 2016 上使用 Python 2.7.14。

为什么这会失败,我们还能尝试什么?是否存在阻止 Python 脚本查看 DLL 的东西?


这里有更多背景:

我们试图让 ctypes 工作的原因是因为 jpype 失败并出现相同的错误 - 因此它们似乎与 Python 模块无法查看或访问 DLL 基本相关。

当我们运行以下命令时...

>> import ctypes
>> import os
>> os.chdir(r"C:\Program Files (x86)\Java\jre1.8.0_181\bin\client\")
>> ctypes.CDLL("jvm.dll")

...我们得到“找不到模块”。

然而,我们可以使用打开命令访问该文件。例如,这个调用在 Python 中工作(注意它也适用于上面使用的 x86 路径)以到达 jvm.dll:

>>> fo = open("C:\\Program Files\\Java\\jre1.8.0_181\\bin\\server\\jvm.dll")

但是即使路径指向同一个文件,通过 Jpype 的这个调用也会失败:

>>> import jpype
>>> jpype.startJVM("C:\\Program Files\\Java\\jre1.8.0_181\\bin\\server\\jvm.dll")

Jpype 给出以下错误:

文件“C:\Python27\lib\site-packages\jpype_core.py”,第 70 行,在 startJVM _jpype.startup(jvm, tuple(args), True) RuntimeError: Unable to load DLL [C:\Program Files\Java \jre1.8.0_181\bin\server\jvm.dll],错误 = 找不到指定的模块。在 native\common\include\jp_platform_win32.h:58

我们使用 jpype 的原因是我们试图让 Jaydebeapi 工作以创建到数据库的 JDBC 连接。

我们如何启用 ctypes(可能是 jpype)来查找和使用 jvm.dll?

4

1 回答 1

0

我们解决这个问题的答案是从使用 Python 2.7 解释器转向使用 Jython。

使用 Jython,我们能够使用 Jadebeapi 库并通过 JDBC 连接到数据库。

于 2018-08-07T09:50:56.503 回答