Мы пытаемся создать простую программу, которая будет общаться с 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
Задача ещё не решена.