我正在为.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文件夹中)。以下是其进口 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进行读写操作,因此我的插件文件夹的系统路径已更改)
问题解决了!