Il 27/11/2015 08:29, Matteo Boscolo ha scritto:
ciao a tutti,
mi sto divertendo ad estendere python con del cpp..
il mio problema e questo:

ho questa funzioncina che mi dovrebbe convertire args e memorizzarmelo in una variabile globale. il tutto mi si rompe quando vado a castare il mio pyApplication con un oggetto CComPtr
static PyObject *
connect(PyObject * self, PyObject * args)
{
        PyObject * pyApplication;
        CComPtr<IUnknown> pUnk;
        //try to get active object
        if (!PyArg_ParseTuple(args, "O", &pyApplication))
            return NULL;
pUnk=(CComPtr<IUnknown> )pyApplication; //<<---- qui mi da errore in compilazione

        HRESULT hRes = pUnk->QueryInterface(&pApp);
    Py_INCREF(Py_None);
    return Py_None;
}


l'oggetto che passo com args viene generato da python con iDispatch in questo modo _application = Dispatch('TD_appl.Application', clsctx=CLSCTX_LOCAL_SERVER | CLSCTX_ACTIVATE_64_BIT_SERVER)
td.connect(_application)

td e' il mio modulo di estensione python ..

Giusto se a qualcuno capitasse di dover fare una cosa come questa
In pratica se si include #include "PythonCOM.h" si hanno ha a disposizione l'interfaccia PyIUnknown , che con il metodo m_obj fa quello che serve

ciao
Matteo

copio qui il codice ....

static PyObject *
connect(PyObject * self, PyObject * args)
{
        PyObject * pyApplication;
        CComPtr<IUnknown> pUnk;
        IUnknown *ret;
        //try to get active object
        if (!PyArg_ParseTuple(args, "O", &pyApplication))
            return NULL;

        pUnk = ((PyIUnknown *)pyApplication)->m_obj;
        HRESULT hRes = pUnk->QueryInterface(&pApp);

    Py_INCREF(Py_None);
    return Py_None;
}

---
Questa e-mail รจ stata controllata per individuare virus con Avast antivirus.
http://www.avast.com

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a