コード例 #1
0
ファイル: PyITypeObjects.cpp プロジェクト: malrsrch/pywin32
PyObject *PyObject_FromELEMDESCArray(ELEMDESC *ed, int len)
{
	PyObject *ret = PyTuple_New(len);
	for (int i = 0; i < len; i++)
		PyTuple_SetItem(ret, i, PyObject_FromELEMDESC(ed + i));
	return ret;
}
コード例 #2
0
PyVARDESC::PyVARDESC(const VARDESC *pVD)
{
	ob_type = &PyVARDESC::Type;
	_Py_NewReference(this);

	memid = pVD->memid;
	wVarFlags = pVD->wVarFlags;
	varkind = pVD->varkind;

	if (varkind == VAR_PERINSTANCE)
		value = PyInt_FromLong(pVD->oInst);
	else if (varkind == VAR_CONST) {
		VARIANT varValue;

		// Cast the variant type here to the correct value for this constant
		// so that the correct Python type will be created below.
		// The problem seems to exist for unsigned types (the variant has
		// a signed type, but the typelib has an unsigned one).  However,
		// doing this unconditionally has side-effects, as the typelib
		// has VT_LPWSTR for the type of strings - and VariantChangeType
		// returns a VT_EMPTY variant in that case.
		// So we only perform this conversion for types known to be a problem:
		switch (pVD->elemdescVar.tdesc.vt) {
		case VT_UI1:
		case VT_UI2:
		case VT_UI4:
		case VT_UI8:
		case VT_UINT:
		case VT_UINT_PTR:
			VariantInit(&varValue);
			VariantChangeType(&varValue, pVD->lpvarValue, 0, pVD->elemdescVar.tdesc.vt);

			value  = PyCom_PyObjectFromVariant(&varValue);

			VariantClear(&varValue);
			break;
		default:
			value  = PyCom_PyObjectFromVariant(pVD->lpvarValue);
			break;
		}
	} else if (varkind == VAR_DISPATCH) {
		// all caller needs is memid, which is already setup.
		value = Py_None;
		Py_INCREF(Py_None);
	} else {
		PyCom_LoggerWarning(NULL, "PyVARDESC ctor has unknown varkind (%d) - returning None", varkind);
		value = Py_None;
		Py_INCREF(Py_None);
	}
	elemdescVar = PyObject_FromELEMDESC(&pVD->elemdescVar);
}
コード例 #3
0
ファイル: PyFUNCDESC.cpp プロジェクト: malrsrch/pywin32
PyFUNCDESC::PyFUNCDESC(const FUNCDESC *desc)
{
	ob_type = &PyFUNCDESC::Type;
	_Py_NewReference(this);

	scodeArray = MakeSCODEArray(desc->lprgscode, desc->cScodes);
	args = PyObject_FromELEMDESCArray(desc->lprgelemdescParam, desc->cParams);
	rettype = PyObject_FromELEMDESC(&desc->elemdescFunc);
	memid = desc->memid;
	funckind = desc->funckind;
	invkind = desc->invkind;
	callconv = desc->callconv;
	cParamsOpt = desc->cParamsOpt;
	oVft = desc->oVft;
	wFuncFlags = desc->wFuncFlags;
}