Я пробую действительно простую программу "hello world", которая должна встраивать скрипт python в мое консольное приложение C ++, но Visual Studio обнаруживает повреждение кучи на Py_XDECREF(pFunc);
Я уже смог запустить PyRun_SimpleFile()
для сценария Python без определений и возвратов, но для моего будущего приложения мне нужна функция Python с возвратами, поэтому PyRun_SimpleFile()
не вариант.
Мой код, основанный на этом введении :
main.cpp
#include "stdafx.h"
#include <stdlib.h>
#include <Python.h>
int main(int argc, char *argv[])
{
Py_SetPythonHome(L"C:/Program Files/Python35");
Py_Initialize();
PyObject *pModule;
PyObject *pFunc, *pValue;
pModule = PyImport_ImportModule("HelloWorld");
if (pModule)
{
pFunc = PyObject_GetAttrString(pModule, "getInteger");
if (pFunc && PyCallable_Check(pFunc))
{
pValue = PyObject_CallObject(pFunc, NULL);
printf_s("C: getInteger() = %ld\n", PyLong_AsLong(pValue));
Py_XDECREF(pValue);
}
else
{
printf("ERROR: function getInteger()\n");
}
Py_XDECREF(pFunc);
}
else
{
printf_s("ERROR: Module not imported\n");
}
Py_XDECREF(pModule);
Py_Finalize();
return 0;
}
HelloWorld.py (в папке Debug моего решения VS2015):
def getInteger():
print('Python function getInteger() called')
c = 100*2
return c
Я уже попробовал флаг _CRTDBG_CHECK_ALWAYS_DF
, но он не сломался на линии разрушения кучи.