[Python] Cast su pyobject

Matteo Boscolo matteo.boscolo a boscolini.eu
Dom 29 Nov 2015 07:21:19 CET


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



Maggiori informazioni sulla lista Python