Python 调用 DLL 调用 Python,"WindowsError: exception: access violation reading 0x00000004"
Python calling DLL calling Python, "WindowsError: exception: access violation reading 0x00000004"
我有一个用Python编写的应用程序。
应用程序调用 dll 中的一些函数(使用 ctypes),这些函数从 python C API 调用一些函数,以在(不同的)python 模块中加载和运行一些函数。这会导致WindowsError: exception: access violation reading 0x00000004
一些 cout 调试告诉我,访问冲突发生在调用 Python C API 时。
我知道 DLL 成功加载了 python 模块,当我将其作为独立.exe进行测试时运行完成,但是当它从 python 应用程序运行时,它会给出此访问冲突错误。
我首先,也许我应该在 DLL 中使用 Py_NewInterpreter 来为这些 python 模块函数创建一个新的单独空间来运行。这似乎很方便,因为应用程序和由 DLL 运行的模块不需要共享任何数据。http://docs.python.org/2/c-api/init.html#Py_NewInterpreter
然而,我对Py_NewInterpreter的初步测试被证明是不成功的,只是犯了进一步的错误和崩溃。
所以我的问题是我应该如何实现这个/我需要做什么才能使 python 模块的 DLL 加载工作?
看起来像是取消引用空指针,即指向结构/类的指针为 null,并且您正在读取偏移量为 4 的子对象。在整个代码中撒上一些 assert(),以确保不会错过任何空指针。另请注意,Python C API 会在发生异常时定期返回 null。
也就是说,你有一个Python程序通过ctypes导入DLL。这个DLL反过来通过Python的C API嵌入了一个Python解释器。右?如果我没记错的话,这实际上在一个进程中为您提供了两个解释器实例。问题是任何全局对象都在两者之间共享,并且可能无法协调。
我会尝试编写一个合适的 Python(包装器)模块,而不是使用 ctypes 来导入 DLL。但是,我会并行做另一件事,那就是在 Python 用户邮件列表中询问此设置是否可以工作以及为什么。如果您愿意,还有一个新闻网关。
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 为什么我无法打开/读取从 Python 调用的 C 扩展名中的 txt 文件?
- 从 Python 调用 c++ 文件
- 如何为从 Python 调用C++启动 GDB?
- 从python调用C++函数,使用cython,使用cythonize
- 为什么在 2019 年我们仍然不能使用 ctypes 从 Python 调用C++?
- 如何使用 python 调用 c++ 函数
- 从 Python 调用 Windows DLL 函数时出错
- 如何从 Python 调用 MPI .so 文件
- 我如何有boost.python调用一个函数来处理对象
- 从Python调用的C++dll
- 通过嵌入式 Python 调用C++代码
- 从 Python 调用 cpp 函数时出现分段错误
- 从Python调用C++64位共享库
- 使用ctypes从Python调用C++方法不起作用
- Boost python,在嵌入时从python调用c ++函数
- 从 Python 调用 C++ opencv 函数(发送一个 cv :: mat 到 C++ 使用 opencv 的 d
- 从 Python 调用自定义C++ dll
- 如何使用Python调用C++代码