Exemple #1
1
SolidEdgeConstants::ObjectType GetObjectType(IDispatchPtr pDispatch)
{
	HRESULT hr = S_OK;

	if (pDispatch != NULL)
	{
		DISPID rgDispId = 0;
		OLECHAR *Names[1] = { L"Type" };
		VARIANT varResult;
		VariantInit(&varResult);
		V_VT(&varResult) = VT_I4;
		DISPPARAMS disp = { NULL, NULL, 0, 0 };

		// Get the DISPID of the 'Type' property.
		IfFailGo(pDispatch->GetIDsOfNames(IID_NULL, Names, 1, LOCALE_USER_DEFAULT, &rgDispId));

		// Invoke the 'Type' property.
		IfFailGo(pDispatch->Invoke(rgDispId, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &disp, &varResult, NULL, NULL));

		return (SolidEdgeConstants::ObjectType)(V_I4(&varResult));		
	}

Error:
	return (SolidEdgeConstants::ObjectType)0;
}
Exemple #2
1
void CWebWindow::TryLoadXML()
{
	if(m_bQueryAttachXML&&m_AttachLoadXML.Length())
	{
		HRESULT hr = S_OK;
		IUnknownPtr spUnk = m_browser.GetControlUnknown();
		/////////
		// Run Script
		////////
		if(spUnk)
		{
			CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> spWB2(spUnk);
			if(spWB2)
			{
				IDispatchPtr spDispDoc = NULL;
				hr = spWB2->get_Document(&spDispDoc);
				if(spDispDoc)
				{
					CComQIPtr<IHTMLDocument, &IID_IHTMLDocument> spDoc(spDispDoc);
					if(spDoc)
					{
						IDispatchPtr spDispScript = NULL;
						hr = spDoc->get_Script(&spDispScript);
						if(spDispScript)
						{
							DISPID dispid = -1;
							OLECHAR FAR* szMember = L"LoadXML";
							hr = spDispScript->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
							if(SUCCEEDED(hr))
							{
								
								CComVariant* pvars = new CComVariant[1];
								pvars[0] = CComVariant((BSTR)m_AttachLoadXML);
								
								DISPPARAMS params = { pvars, NULL, 1, 0 };
								hr = spDispScript->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &params, NULL, NULL, NULL);
								delete []pvars;
							}
						}
					}
				}
			}
		}
	}
}
Exemple #3
1
/* void setProperty (in string propertyName, in string propertyValue); */
NS_IMETHODIMP
nsScriptablePeer::SetProperty(const char *propertyName, nsIVariant *propertyValue)
{
    HRESULT hr;
    DISPID dispid;
    IDispatchPtr disp;
    if (FAILED(GetIDispatch(&disp)))
    {
        return NPERR_GENERIC_ERROR; 
    }
    USES_CONVERSION;
    OLECHAR* szMember = A2OLE(propertyName);
    hr = disp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR;
    }

    _variant_t v;
    ConvertVariants(propertyValue, &v);
    
    DISPID dispIdPut = DISPID_PROPERTYPUT;
    DISPPARAMS functionArgs;
    _variant_t vResult;
    
    functionArgs.rgdispidNamedArgs = &dispIdPut;
    functionArgs.rgvarg = &v;
    functionArgs.cArgs = 1;
    functionArgs.cNamedArgs = 1;

    hr = disp->Invoke(
        dispid,
        IID_NULL,
        LOCALE_USER_DEFAULT,
        DISPATCH_PROPERTYPUT,
        &functionArgs, &vResult, NULL, NULL);
    
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR;
    }

    return NS_OK;
}
HRESULT vmsDomHelper::ExecJScript(IHTMLDocument *pDoc, BSTR bstrFuncName, const vector <CComVariant>& vArgs, CComVariant &vaResult)
{
	ATLASSERT (pDoc != NULL);
	if (!pDoc)
		return E_INVALIDARG;

	IDispatchPtr spScript;
	HRESULT hr = pDoc->get_Script (&spScript);
	if (spScript == NULL)
		return hr;

	DISPID did = NULL;
	hr = spScript->GetIDsOfNames (IID_NULL, &bstrFuncName, 1, LOCALE_SYSTEM_DEFAULT, &did);
	if (FAILED (hr))
		return hr;

	DISPPARAMS dparams;
	ZeroMemory (&dparams, sizeof (dparams));
	dparams.cArgs = vArgs.size ();
	if (dparams.cArgs)
		dparams.rgvarg = new VARIANT [dparams.cArgs];

	for (int i = 0; i < vArgs.size (); i++)
	{
		CComVariant vaTmp; vaTmp.Copy (&vArgs [vArgs.size () - i - 1]);
		VariantInit (&dparams.rgvarg [i]);
		vaTmp.Detach (&dparams.rgvarg [i]);
	}

	EXCEPINFO ei;
	ZeroMemory (&ei, sizeof (ei));
	UINT nArgErr = (UINT)-1;

	hr = spScript->Invoke (did, IID_NULL, 0, DISPATCH_METHOD, &dparams, &vaResult, &ei, &nArgErr);

	if (dparams.rgvarg)
	{
		for (int i = 0; i < dparams.cArgs; i++)
			VariantClear (&dparams.rgvarg [i]);
		delete [] dparams.rgvarg;
	}

	return hr;
}
Exemple #5
1
NS_IMETHODIMP 
nsScriptablePeer::GetProperty(const char *propertyName, nsIVariant **_retval)
{
    HRESULT hr;
    DISPID dispid;
    IDispatchPtr disp;
    if (FAILED(GetIDispatch(&disp)))
    {
        return NPERR_GENERIC_ERROR; 
    }
    USES_CONVERSION;
    OLECHAR* szMember = A2OLE(propertyName);
    hr = disp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR;
    }

    _variant_t vResult;
    
    DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
    hr = disp->Invoke(
        dispid,
        IID_NULL,
        LOCALE_USER_DEFAULT,
        DISPATCH_PROPERTYGET,
        &dispparamsNoArgs, &vResult, NULL, NULL);
    
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR;
    }

    nsCOMPtr<nsIVariant> propertyValue;
    ConvertVariants(&vResult, getter_AddRefs(propertyValue));
    *_retval = propertyValue;
    NS_IF_ADDREF(*_retval);

    return NS_OK;
}
HRESULT CCOMDispatchHelper::AutoWrap(int autoType, VARIANT* pvResult, const IDispatchPtr& spDisp, 
									 LPOLESTR ptName, int cArgs...)
{
	if(spDisp == 0) 
		return E_INVALIDARG;

	va_list marker;
	va_start(marker, cArgs);

	DISPPARAMS dp = { NULL, NULL, 0, 0 };
	DISPID dispidNamed = DISPID_PROPERTYPUT;
	DISPID dispID;
	HRESULT hr;
	TCHAR szName[MAX_PATH];

	WideCharToMultiByte(CP_ACP, 0, ptName, -1, (LPSTR)szName, 256, NULL, NULL);

	hr = spDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);
	RETURN_FAILED(hr);

	VARIANT *pArgs = new VARIANT[cArgs+1];
	for(int i=0; i<cArgs; i++) 
		pArgs[i] = va_arg(marker, VARIANT);

	dp.cArgs = cArgs;
	dp.rgvarg = pArgs;

	if(autoType & DISPATCH_PROPERTYPUT) 
	{
		dp.cNamedArgs = 1;
		dp.rgdispidNamedArgs = &dispidNamed;
	}
	
	hr = spDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL);

	va_end(marker);
	delete [] pArgs;
	return hr;
}
Exemple #7
1
NS_IMETHODIMP
nsScriptablePeer::InternalInvoke(const char *aMethod, unsigned int aNumArgs, nsIVariant *aArgs[])
{
    HRESULT hr;
    DISPID dispid;

    IDispatchPtr disp;
    if (FAILED(GetIDispatch(&disp)))
    {
        return NPERR_GENERIC_ERROR; 
    }

    USES_CONVERSION;
    OLECHAR* szMember = A2OLE(aMethod);
    hr = disp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR; 
    }
    
    _variant_t *pArgs = NULL;
    if (aNumArgs > 0)
    {
        pArgs = new _variant_t[aNumArgs];
        if (pArgs == NULL)
        {
            return NS_ERROR_OUT_OF_MEMORY;
        }
        for (unsigned int i = 0; i < aNumArgs; i++)
        {
            hr = ConvertVariants(aArgs[i], &pArgs[i]);
            if (FAILED(hr))
            {
                delete []pArgs;
                return NS_ERROR_INVALID_ARG;
            }
        }
    }

    DISPPARAMS dispparams = {NULL, NULL, 0, 0};
    _variant_t vResult;

    dispparams.cArgs = aNumArgs;
    dispparams.rgvarg = pArgs;

    hr = disp->Invoke(
        dispid,
        IID_NULL,
        LOCALE_USER_DEFAULT,
        DISPATCH_METHOD,
        &dispparams, &vResult, NULL, NULL);

    if (pArgs)
    {
        delete []pArgs;
    }

    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR; 
    }

    return NS_OK;
}