我为.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.pyd
,sst_pyd
,harshlib.pyd
,unicodedata.pyd
, tkinter.pyd
,OptimRestriction
不使用的所有模块。
调试崩溃后给出的错误是:
Unhandled exception at 0x1E0AA0C5 (python27.dll) in xxx.exe: 0xC0000005: Access violation reading location 0x00000004.
它打破了_callthreadstart
功能。
OptimRestriction
是一个很长的程序,可以导入很多模块(也在.exe文件夹中)。以下是其导入列表:
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);
答案 0 :(得分:1)
经过长时间将问题减少到某些代码行后,我发现问题出在某些模块打开.txt文件的行中。
我认为将.txt文件放在.py程序的同一文件夹中是正确的做法,但似乎我需要将它们复制到我的c ++插件的文件夹中(我认为'因为在调试时,我的插件文件夹的系统路径已经改变,因为pyhton的写入和读取是从那里完成的。
问题解决了!