[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