MCPcopy Create free account
hub / github.com/mhammond/pywin32 / PyCom_MakeOlePythonCall

Function PyCom_MakeOlePythonCall

com/win32com/src/oleargs.cpp:1582–1632  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1580}
1581
1582BOOL PyCom_MakeOlePythonCall(PyObject *handler, DISPPARAMS FAR* params, VARIANT FAR* pVarResult,
1583 EXCEPINFO FAR* pexcepinfo, UINT FAR* puArgErr, PyObject *addnlArgs)
1584{
1585 PythonOleArgHelper *pHelpers = NULL;
1586 PythonOleArgHelper *pNamedHelpers = NULL;
1587 PyObject *argList = NULL;
1588 PyObject *namedArgList = NULL;
1589 if (params) {
1590 if (!MakePythonArgumentTuples(&argList, &pHelpers, &namedArgList, &pNamedHelpers, params )) {
1591 PyErr_Clear();
1592 return FALSE;
1593 }
1594 }
1595 if (addnlArgs) {
1596 PyObject *varArgs = argList;
1597 argList = Py_BuildValue("OO", varArgs, addnlArgs);
1598 Py_DECREF(varArgs);
1599 }
1600 PyObject *result = PyEval_CallObject(handler, argList);
1601 Py_XDECREF(argList);
1602 Py_XDECREF(namedArgList);
1603 // handlers reference cleaned up by virtual manager.
1604 BOOL bOK = (result!=NULL);
1605 if (result) {
1606 // If result is a tuple, then the Python code
1607 // wishes to set some "byval" arguments.
1608 // make the return type
1609 PyObject *simpleRet;
1610 if (PyTuple_Check(result) && PyTuple_Size(result)) {
1611 simpleRet = PyTuple_GetItem(result, 0);
1612 int retNumber = 1;
1613 int retTotal = PyTuple_Size(result);
1614
1615 // Params are reverse order - loop from the back.
1616 for (unsigned int param=params->cArgs;param!=0 && retNumber < retTotal;param--) {
1617 if (pHelpers[param-1].m_bIsOut) {
1618 PyObject *val = PyTuple_GetItem(result, retNumber);
1619 pHelpers[param-1].MakeObjToVariant(val, params->rgvarg+param-1, NULL);
1620 retNumber++;
1621 }
1622 }
1623 } else {
1624 simpleRet = result;
1625 }
1626 PyCom_VariantFromPyObject(simpleRet, pVarResult);
1627 Py_DECREF(result);
1628 }
1629 delete [] pHelpers;
1630 delete [] pNamedHelpers;
1631 return bOK;
1632}
1633

Callers

nothing calls this directly

Calls 3

MakePythonArgumentTuplesFunction · 0.85
MakeObjToVariantMethod · 0.80

Tested by

no test coverage detected