我正在为.exe程序制作.dll并将python嵌入其中。使用这个简单的.py程序效果很好

from time import *
##import OptimRestriction

def test_callsign(b):
    ...(simple script)
    return

我所做的就是将.py程序,Dll和Lib文件夹复制到xxx.exe文件夹中,就像here一样。

但是,一旦我取消注释OptimRestriction的导入,调试就会崩溃。首先,当调用初始化和处理Python的线程的调用时,它开始加载符号:_ctypes.pyd_sockets.pydsst_pydharshlib.pydunicodedata.pydtkinter.pydOptimRestriction不使用的所有模块。

调试崩溃后给出的错误是:
Unhandled exception at 0x1E0AA0C5 (python27.dll) in xxx.exe: 0xC0000005: Access violation reading location 0x00000004.
而且它破坏了_callthreadstart函数。
OptimRestriction是一个很长的程序,它导入许多模块(也位于.exe文件夹中)。以下是其进口 list :
from GrafFunc import *
from LogFunc import *
from DinamicaFunc import *
from Dinamica2 import *
from CDR import *
...
import sys
import cProfile"

在我看来,该线程启动所需的时间太长,因为调试开始很长时间加载那些文件,因此会产生错误。我对么?如果是的话,如果OptimRestriction及其输入不使用它们,为什么还要加载这些文件?

编辑:新信息。在此行中说Can't import module会崩溃:pModule = PyImport_Import(pName);

最佳答案

经过长时间的研究,将问题简化为一些代码行,我才发现问题出在某些模块打开.txt文件进行读取的行中。

我认为将.txt文件放在.py程序的同一文件夹中是正确的做法,但是似乎我需要将它们复制到c++插件的文件夹中(我认为这是因为在调试时,因为已在pyhton进行读写操作,因此我的插件文件夹的系统路径已更改)

问题解决了!

09-25 21:14