在C ++中嵌入python时遇到模块问题

时间:2014-04-15 18:01:30

标签: python c++ dll embed python-c-api

我为.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文件夹中)。以下是其导入列表:

from GrafFunc import *
from LogFunc import *
from DinamicaFunc import *
from Dinamica2 import *
from CDR import *
...
import sys
import cProfile"

在我看来,线程启动时间太长,因为调试开始长时间加载这些文件,因此它会产生错误。我对么?如果是这样的话,为什么加载这些文件OptimRestriction并且它的用户不能使用它们?

编辑:新信息。它在此行崩溃说Can't import modulepModule = PyImport_Import(pName);

1 个答案:

答案 0 :(得分:1)

经过长时间将问题减少到某些代码行后,我发现问题出在某些模块打开.txt文件的行中。

我认为将.txt文件放在.py程序的同一文件夹中是正确的做法,但似乎我需要将它们复制到我的c ++插件的文件夹中(我认为'因为在调试时,我的插件文件夹的系统路径已经改变,因为pyhton的写入和读取是从那里完成的。

问题解决了!

相关问题