0
내 C++ 프로그램과 sympy를 사용하려고하는데 다음과 같은 임베딩 코드를 사용하고 있습니다.C++ 임베딩을 사용하여 sympy 호출하기
int sym_ex(const char * input_expression, const char * output_expression){
PyObject *pName, *pModule, *pDict, *pFunc;
PyObject *pArgs, *pValue;
int i;
const char * file = "sympy";
const char * function = "simplify";
Py_Initialize();
//PyRun_SimpleString("from sympy import *\n");
pName = PyString_FromString(file);
/* Error checking of pName left out */
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != NULL) {
pFunc = PyObject_GetAttrString(pModule, function);
/* pFunc is a new reference */
if (pFunc && PyCallable_Check(pFunc)) {
pArgs = PyTuple_New(1);
pValue = PyString_FromString(input_expression);
printf("the string passed %s\n", input_expression);
if (!pValue) {
Py_DECREF(pArgs);
Py_DECREF(pModule);
fprintf(stderr, "Cannot convert argument\n");
return 1;
}
/* pValue reference stolen here: */
PyTuple_SetItem(pArgs, 0, pValue);
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != NULL) {
printf("Result of call: %s\n", PyString_AsString(pValue));
Py_DECREF(pValue);
}
else {
Py_DECREF(pFunc);
Py_DECREF(pModule);
PyErr_Print();
fprintf(stderr, "Call failed\n");
return 1;
}
}
else {
if (PyErr_Occurred())
PyErr_Print();
fprintf(stderr, "Cannot find function \"%s\"\n", function);
}
Py_XDECREF(pFunc);
Py_DECREF(pModule);
}
else {
PyErr_Print();
fprintf(stderr, "Failed to load \"%s\"\n", file);
return 1;
}
Py_Finalize();
return 0;
}
하지만,이 기능을 사용하여 작은 프로그램을 작성하고 실행,
#include <stdio>
#include <iostream>
int main(){
char * input_expression = "2 + 2";
char * output_expression = new char[250];
sym_ex(input_expression, output_expression);
return 0;
}
그것은 다음과 같은 유형의 오류를 제공합니다. Visual C++, Python 2.7.8에서 Windows에서 실행 중입니다.
Exception TypeError: 'expected string or Unicode object, Integer found' in <module 'threading' from 'C:\Python278\Lib\threading.pyc'> ignored
누군가 나를 도울 수 있습니까? 감사합니다
더 큰 목표는 무엇입니까? 왜 이렇게해야하는지 분명하지 않습니다. 속도인가요? 다음 CSymPy 원하는 수 있습니다 ... –
CSymPy Visual C++ (Microsoft 컴파일러)에서 컴파일합니까? – Charith
잘 모르겠습니다. 그들이 CMake를 사용하는 것처럼 보이기 때문에 기회가 상당히 좋다. https://github.com/sympy/csympy –