Bien le bonjour !
Je cherche et hélas ne trouve pas le moyen de passer un pointeur c++ comme argument à l'appel d'une fonction python avec l'api C.
Pour l'explication, j'ai une application C++ qui intègre un interpréteur python et fait donc des appels vers des scripts python externes.
De la sorte :
Bref. Dans tout ce bout de code qui n'est présent que pour expliquer un peu mieux mon soucis, j'utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Py_Initialize(); PyObject *pName, *pModule, *pDict, *pFunc; PyObject *pArgs, *pValue; pName = PyString_FromString("module"); /* Error checking of pName left out */ pModule = PyImport_Import(pName); Py_DECREF(pName); if (pModule != NULL) { pFunc = PyObject_GetAttrString(pModule, "main"); /* pFunc is a new reference */ if (pFunc && PyCallable_Check(pFunc)) { pArgs = PyTuple_New(1); pValue = PyInt_FromLong(452); if (!pValue) { Py_DECREF(pArgs); Py_DECREF(pModule); std::cout << "Cannot convert argument" << std::endl; } // pValue reference stolen here: PyTuple_SetItem(pArgs, i, pValue); } pValue = PyObject_CallObject(pFunc, pArgs); Py_DECREF(pArgs); if (pValue != NULL) { return PyInt_AsLong(pValue); Py_DECREF(pValue); } else { Py_DECREF(pFunc); Py_DECREF(pModule); PyErr_Print(); std::cout << "Call failed" << std::endl; } } else { if (PyErr_Occurred()) PyErr_Print(); std::cout << "Cannot find function main" << std::endl; } Py_XDECREF(pFunc); Py_DECREF(pModule); } else { PyErr_Print(); std::cout << "Failed to load " << "module.py" << std::endl; } Py_Finalize();
Qui me sert donc à wrapper un objet de type long c++ en objet de type int python. Je cherche à faire la même chose avec un pointeur c++, mettons un pointeur sur string que je pourrais envoyer en paramètre à l'appel de la fonction main de mon script. Le but étant de pouvoir modifier la valeur pointé depuis le script sans avoir de retour à faire de sa part.
Code : Sélectionner tout - Visualiser dans une fenêtre à part pValue = PyInt_FromLong(452);
Hélas, je ne trouve pas comment faire.
Si quelqu'un a une idée, merci d'avance =)
Partager