1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
#include <iostream>
#include <Python.h>
#include <string>
using namespace std;
int main()
{
Py_Initialize();
PyObject *module = NULL, *fonction = NULL;
PyObject *arguments, *valeur;
string fileName = "script";
string nomFonction = "fonction";
module = PyImport_AddModule(fileName.c_str());
module = PyImport_ImportModule(fileName.c_str());
if(module!=NULL)// Si le fichier a été correctement chargé
{
cout << PyModule_GetName(module) << " charge.\n";
if(!PyObject_HasAttr(module, PyString_FromString(nomFonction.c_str())))
cout << "\"Attribut\" introuvable... :(\n";
fonction = PyObject_GetAttrString(module, nomFonction.c_str());
if(fonction && PyCallable_Check(fonction))// On vérifie si la fonciton existe et si elle peut être appellée
{
//Préparation des arguments
arguments = PyTuple_New(2); // 2 est le nombre d'arguments
valeur = PyInt_FromLong(8); // 10 est la valeur du premier argument
PyTuple_SetItem(arguments, 0, valeur); // 0 est le numéro de l'argument (le premier argument est l'argument 0)
valeur = PyInt_FromLong(5); // 5 est la valeur du second argument
PyTuple_SetItem(arguments, 1, valeur);
//Appel de la fonction (un grand moment !)
valeur = PyObject_CallObject(fonction, arguments); // Simple, non ? :-)
//Nettoyage des arguments
Py_DECREF(arguments);
//Verification du réslutat de l'appel de la fonction et affichage de la valeur retournee
if(valeur != NULL)
{
cout << "L'appel de la fonction a retourné: "<<PyInt_AsLong(valeur)<<endl;
Py_DECREF(valeur);
}
}
else
{
cout << "-> donc pas de fonction a appeller.\n";
return 1;
}
}
else
{
cout << "Module introuvable.\n";
return 1;
}
Py_Finalize();
return 0;
} |
Partager