Проблема связи между CPP и Python — застревание перед приобретением ThreadState

Мы пытаемся создать простую программу, которая будет общаться с cpp на python
Это наш код (модифицированный для простоты)
#include «iostream» #include

using namespace std;

PyInterpreterState* _InterpState=NULL;

class APPNAME_PyLock
{
public:
/// Acquire the lock
APPNAME_PyLock(bool lock = true)
: _lock(lock)
{
cout<<"Inside APPNAME_PyLock () function    CPlock1"<<endl;
if (_lock)
{
cout<<"CPlock2"<<endl;
_threadState = PyThreadState_New(_InterpState);
cout<<"CPlock3"<<endl;
PyEval_AcquireThread(_threadState);
cout<<"CPlock4"<<endl;
}
}
/// Release the lock
~APPNAME_PyLock()
{
if (_lock)
{
PyEval_ReleaseThread(_threadState);
PyThreadState_Clear(_threadState);
PyThreadState_Delete(_threadState);
}
}
private:
bool _lock;
PyThreadState* _threadState;
};#ifdef __cplusplus
extern "C"{
#endif

PyObject* pycall_Shutdown(PyObject* self, PyObject* args);

#ifdef __cplusplus
}
#endif

PyMethodDef _SessionMethods[] =
{
{(char *)"writeOutput",         pycall_Shutdown,                METH_VARARGS, (char *)"Output to standard output stream."},
{0, 0, 0, 0}
};

PyObject* pycall_Shutdown(PyObject* self, PyObject* args)
{

cout<<"I am form shutdown"<<endl;
return 0;
}

int main(int argc, char *argv[])
{

Py_Initialize();

PyObject* _SessionModule = 0;
PyEval_InitThreads();
cout<<"CP5"<<endl;
PyThreadState* threadState = PyThreadState_Get();
cout<<"CP5.1"<<endl;
_InterpState = threadState->interp;

APPNAME_PyLock();

cout<<"CP5.3"<<endl;
_SessionModule = Py_InitModule3((char *)"ttsession", _SessionMethods, (char *)"Built-in module to run TTServer.");
cout<<"CP7"<<endl;
PyEval_ReleaseThread(threadState);
cout<<"END OF EXECUTION\n\n\n";

Py_Finalize();

return 0;
}

Это содержимое командного файла, который я использую для сборки приложения.

cl /c Try3.cpp /IC:\Python27\include
link /link -debug /OUT:"./lib/Try3run.exe" Try3.obj /LIBPATH:"c:/Python27/libs" python27.lib
cd /d %~dp0%
set PATH=%PATH%;%~dp0%lib

Я работаю с Python 2.7.8 (установлен в папку c: \ Python27)

У меня есть папка с именем «Lib«в текущей папке. Содержит такие файлы, как
python27.lib, python27_d.lib.

Я скопировал DLL папка и Lib папка из C: \ python27, в папку с именем питон в текущей папке

Чтобы запустить каталог изменения файла в lib, а затем наберите «Try3run.exe«

Сбой программы на контрольной точке 3 (CPlock3) в функции APPNAME_PyLock () перед получением блокировки.

Я делаю что-то неправильно ?

Есть ли способ, с помощью которого я могу избавиться от этой проблемы?

Замечания : Я запускаю это в командной строке Visual Studio

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]