Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

C++ and Python Integration Issues. C++ runs the menu for the program and python does the math and C++ calls of the python function for

C++ and Python Integration Issues. C++ runs the menu for the program and python does the math and C++ calls of the python function for the math. Every time I run the Multiplication table it doesn't loop but when I run Double Value it does. I think it might be something in my python code but I am not sure. Please help me see what i am doing wrong.

CPP code

#include #include #include #include #include

using namespace std;

/* Description: To call this function, simply pass the function name in Python that you wish to call. Example: callProcedure(\"printsomething\"); Output: Python will print on the screen: Hello from python! Return: None */ void CallProcedure(string pName) { char* procname = new char[pName.length() + 1]; std::strcpy(procname, pName.c_str());

Py_Initialize(); PyObject* my_module = PyImport_ImportModule(\"PythonCode\"); PyErr_Print(); PyObject* my_function = PyObject_GetAttrString(my_module, procname); PyObject* my_result = PyObject_CallObject(my_function, NULL); Py_Finalize();

delete[] procname; }

/* Description: To call this function, pass the name of the Python functino you wish to call and the string parameter you want to send Example: int x = callIntFunc(\"PrintMe\",\"Test\"); Output: Python will print on the screen: You sent me: Test Return: 100 is returned to the C++ */ int callIntFunc(string proc, string param) { char* procname = new char[proc.length() + 1]; std::strcpy(procname, proc.c_str());

char* paramval = new char[param.length() + 1]; std::strcpy(paramval, param.c_str());

PyObject* pName, * pModule, * pDict, * pFunc, * pValue = nullptr, * presult = nullptr; // Initialize the Python Interpreter Py_Initialize(); // Build the name object pName = PyUnicode_FromString((char*)\"PythonCode\"); // Load the module object pModule = PyImport_Import(pName); // pDict is a borrowed reference pDict = PyModule_GetDict(pModule); // pFunc is also a borrowed reference pFunc = PyDict_GetItemString(pDict, procname); if (PyCallable_Check(pFunc)) { pValue = Py_BuildValue(\"(z)\", paramval); PyErr_Print(); presult = PyObject_CallObject(pFunc, pValue); PyErr_Print(); } else { PyErr_Print(); } //printf(\"Result is %d \", _PyLong_AsInt(presult)); Py_DECREF(pValue); // Clean up Py_DECREF(pModule); Py_DECREF(pName); // Finish the Python Interpreter Py_Finalize();

// clean delete[] procname; delete[] paramval;

return _PyLong_AsInt(presult); }

/* Description: To call this function, pass the name of the Python functino you wish to call and the string parameter you want to send Example: int x = callIntFunc(\"doublevalue\",5); Return: 25 is returned to the C++ */ int callIntFunc(string proc, int param) { char* procname = new char[proc.length() + 1]; std::strcpy(procname, proc.c_str());

PyObject* pName, * pModule, * pDict, * pFunc, * pValue = nullptr, * presult = nullptr; // Initialize the Python Interpreter Py_Initialize(); // Build the name object pName = PyUnicode_FromString((char*)\"PythonCode\"); // Load the module object pModule = PyImport_Import(pName); // pDict is a borrowed reference pDict = PyModule_GetDict(pModule); // pFunc is also a borrowed reference pFunc = PyDict_GetItemString(pDict, procname); if (PyCallable_Check(pFunc)) { pValue = Py_BuildValue(\"(i)\", param); PyErr_Print(); presult = PyObject_CallObject(pFunc, pValue); PyErr_Print(); } else { PyErr_Print(); } //printf(\"Result is %d \", _PyLong_AsInt(presult)); Py_DECREF(pValue); // Clean up Py_DECREF(pModule); Py_DECREF(pName); // Finish the Python Interpreter Py_Finalize();

// clean delete[] procname;

return _PyLong_AsInt(presult); }

void MultiplicationTable() { int a; cout cin >> a; cout }

void DoubleValue() { int b; cout cin >> b; cout cout }

void DisplayMenu() { int c; cout cout cout cout cin >> c; switch (c) { case 1: { MultiplicationTable(); DisplayMenu(); break; } case 2: { DoubleValue(); DisplayMenu(); break; } case 3: { cout break; } default: printf(\" Wrong Input \"); } }

void main() { DisplayMenu();

return;

}

Python Code

import re import string

def MultiplicationTable(a): n = 10 for i in range(1, (n+1)): q = a * i print(f\"{a} X {i} = {q}\")

def DoubleValue(b): return b * 2

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Introduction to Wireless and Mobile Systems

Authors: Dharma P. Agrawal, Qing An Zeng

4th edition

1305087135, 978-1305087132, 9781305259621, 1305259629, 9781305537910 , 978-130508713

More Books

Students also viewed these Programming questions

Question

b. Calculate the equation of the estimated regression line.

Answered: 1 week ago