示例#1
0
static HRESULT getDispatchProperty (IDispatch *object, const char *property, VARIANT &value)
{
	BSTR bstr = Utils::str2bstr(property);
	DISPID dispId;
	IDispatchEx *pDispatchEx;
	static IID IDispatchEx_CLSID = { 0xa6ef9860, 0xc720, 0x11d0, {0x93, 0x37, 0x00,0xa0,0xc9,0x0d,0xca,0xa9}};
	HRESULT hr = object->QueryInterface(IDispatchEx_CLSID, reinterpret_cast<void**>(&pDispatchEx)) ;
	if (! FAILED (hr) && pDispatchEx != NULL)
	{
		hr = pDispatchEx->GetDispID(bstr, fdexNameEnsure, &dispId);
		if (FAILED (hr))
		{
			MZNSendDebugMessage("Unable to get property %ls", bstr);
		}
		else
		{
			DISPPARAMS dp;
			dp.cArgs = 0;
			dp.cNamedArgs = 0;
			dp.rgvarg = NULL;
			VARIANT result ;
			result.vt = VT_NULL;
			UINT error;
			EXCEPINFO ei;
			ZeroMemory (&ei, sizeof ei);
			hr = pDispatchEx->InvokeEx(dispId, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &dp, &value, &ei, NULL);
			if ( FAILED(hr))
			{
#if 0
				MZNSendDebugMessage("Cannot get property %s", property);
				MZNSendDebugMessage("Error en InvokeEx");
				MZNSendDebugMessage("Error en %lX en attributes %d", (long) hr,  (int) error);
				MZNSendDebugMessage("Error code %d ", (int) ei.wCode);
				MZNSendDebugMessage("Source %ls", ei.bstrSource);
				MZNSendDebugMessage("Description %ls", ei.bstrDescription);
#endif
			}

		}
		pDispatchEx -> Release();
	}
	else
	{
		MZNSendDebugMessage("Cannot get IDispatchEx");
	}
	SysFreeString(bstr);
	return hr;
}
示例#2
0
// @pymethod int|PyIDispatchEx|GetDispID|Returns the member id for a name
PyObject *PyIDispatchEx::GetDispID(PyObject *self, PyObject *args)
{
	long fdex;
	PyObject *obName;
	if (!PyArg_ParseTuple(args, "Ol:GetDispId",
		&obName, // @pyparm <o PyUnicode>|name||Passed in name to be mapped
		&fdex)) // @pyparm int|fdex||Determines the options for obtaining the member identifier. This can be a combination of the fdex* constants:
		return NULL;
	PyWin_AutoFreeBstr name;
	if (!PyWinObject_AsAutoFreeBstr(obName, &name))
		return NULL;
	IDispatchEx *pMyDispatchEx = GetI(self);
	if (pMyDispatchEx==NULL) return NULL;
	DISPID dispid;
	PY_INTERFACE_PRECALL;
	HRESULT hr = pMyDispatchEx->GetDispID(name, (DWORD)fdex, &dispid);
	PY_INTERFACE_POSTCALL;
	if (FAILED(hr)) return SetPythonCOMError(self, hr);
	return PyInt_FromLong(dispid);
}
示例#3
0
static HRESULT setDispatchProperty (IDispatch *object, const char *property, VARIANT &value)
{
	BSTR bstr = Utils::str2bstr(property);
	DISPID dispId;
	IDispatchEx *pDispatchEx;
	static IID IDispatchEx_CLSID = { 0xa6ef9860, 0xc720, 0x11d0, {0x93, 0x37, 0x00,0xa0,0xc9,0x0d,0xca,0xa9}};
	HRESULT hr = object->QueryInterface(IDispatchEx_CLSID, reinterpret_cast<void**>(&pDispatchEx)) ;
	if (! FAILED (hr) && pDispatchEx != NULL)
	{
		hr = pDispatchEx->GetDispID(bstr, fdexNameEnsure, &dispId);
		if (FAILED (hr))
		{
			MZNSendDebugMessage("Unable to create property %ls", bstr);
		}
		else
		{
			DISPPARAMS dp;
			dp.cArgs = 1;
			dp.cNamedArgs = 0;
			dp.rgvarg = &value;
			VARIANT result ;
			result.vt = VT_NULL;
			UINT error;
			hr = pDispatchEx->InvokeEx(dispId, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT, &dp, &result, NULL, NULL);

			if ( !FAILED(hr))
			{
			}
			else
				MZNSendDebugMessage("Error en InvokeEx");

		}
		pDispatchEx -> Release();
	}
	else
	{
		MZNSendDebugMessage("Cannot get IDispatchEx");
	}
	SysFreeString(bstr);
	return hr;
}