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 :

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();
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
pValue = PyInt_FromLong(452);
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.

Hélas, je ne trouve pas comment faire.

Si quelqu'un a une idée, merci d'avance =)