Необработанное исключение при встраивании Python в C ++ - PullRequest
0 голосов
/ 27 апреля 2020

Я создал файл Python, содержащий функцию, которая возвращает ряд Тейлора порождающей функции рекуррентного отношения. Я хочу запустить эту функцию из программы на C ++. Теперь проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю файл Python из программы C ++ без импорта каких-либо внешних библиотек (а именно, sympy, поскольку это то, что я использовал в моем файле Python), файл работает нормально и выведет что-то вроде Hello World, если я напишу в файле Python только простые команды, такие как

print('Hello World')

.

Но когда я импортирую sympy, а затем запускаю файл из программы C ++ Я получаю следующую ошибку -

Unhandled exception at 0x79BC85C2 (python37.dll) in merger.exe: 0xC0000005: Access violation reading location 0x00000004. occurred

Ниже приведен код, который я написал -

#include "Python.h"
#include<iostream>
#include<Windows.h>
using namespace std;
int main()
{
    Py_Initialize();
    PySys_SetPath(L"C:/Users/acer/PycharmProjects/justpractice");
    PyObject* pfile = PyImport_ImportModule("derivativecalc");
    PyObject* pclass = PyObject_GetAttrString(pfile, "CreatorClass"); < --  Line where the error occurs
    Py_Finalize();
    return 0;
}

Ниже приведен код в моем файле Python. Я не использую никакие функции, которые я определил до сих пор.

import sympy as sy
from sympy.functions import sin, cos

x = sy.Symbol('x')
f = sin(x)


# Factorial function
def factorial(n):
    if n <= 0:
        return 1
    else:
        return n * factorial(n - 1)


# Taylor approximation at x0 of the function 'function'
def taylor(function, x0, n):
    i = 0
    p = 0
    while i <= n:
        p = p + (function.diff(x, i).subs(x, x0)) / (factorial(i)) * (x - x0) ** i
        i += 1
    return p


class CreatorClass:
    def creator(self, a1, a0, p, q):
        y = sy.Symbol('y')
        func1 = ((a0 + (a1 - p * a0)) * y) / (1 - p * y - q * (y ** 2))
        return taylor(func1, 0, 4)

print('Hello World')

Я понятия не имею, почему включение некоторых внешних библиотек в мою программу Python влияет на вывод в программе CPP. Я попытался включить папку site-packages в мои Python библиотеки в папку Debug моего проекта в Visual Studio, но безрезультатно.

Я научился встраивать Python в C ++ только сегодня, чтобы вы могли думай обо мне как о супер новичке. Любая помощь будет оценена.

...