我有一个用 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 加载工作?