Beispiel #1
0
HRESULT PutProperty(IDispatch* pDisp, OLECHAR* pwszName, const VARIANT* pvValue)
{
    HRESULT hr;
    DISPID dispID;
    DISPID dispIDNamedArgs[1] = { DISPID_PROPERTYPUT };

    // DISPID を取得
    hr = GetIDOfName(pDisp, pwszName, &dispID);
    if (FAILED(hr)) { return hr; }

    VARIANTARG vArgs[1];
    VariantInit(&vArgs[0]);
    VariantCopy(&vArgs[0], const_cast<VARIANT*>(pvValue));

    DISPPARAMS dispParams;
    dispParams.rgvarg = vArgs;
    dispParams.rgdispidNamedArgs = dispIDNamedArgs;
    dispParams.cArgs = 1;
    dispParams.cNamedArgs = 1;

    hr = pDisp->Invoke(
                dispID, IID_NULL,
                LOCALE_USER_DEFAULT,
                DISPATCH_PROPERTYPUT,
                &dispParams, NULL,
                NULL, NULL);
    VariantClear(&vArgs[0]);

    return hr;
}
Beispiel #2
0
HRESULT CMObject::PutPropertyByName(LPCTSTR lpsz, VARIANT* pVar)
{
	DISPID dwDispID;
	if(p==NULL)
		return -1;
	HRESULT hr = GetIDOfName(lpsz, &dwDispID);
	if (SUCCEEDED(hr))
		hr = PutProperty(p, dwDispID, pVar);
	return hr;
}
Beispiel #3
0
_variant_t CMObject::GetPropertyByName(LPCTSTR lpsz)
{
	_variant_t vRet;
	vRet.ChangeType(VT_EMPTY);
	if(p==NULL)
		return vRet;
	DISPID dwDispID;
	HRESULT hr = GetIDOfName(lpsz, &dwDispID);
	if (SUCCEEDED(hr))
		GetProperty(p, dwDispID, &vRet);
	return vRet;
}
Beispiel #4
0
// Invoke a method by name with no parameters
_variant_t CMObject::Invoke0(LPCTSTR lpszName)
{
	HRESULT hr;
	DISPID dispid;
	_variant_t varRet;
	if(p==NULL)
		return varRet;
	hr = GetIDOfName(lpszName, &dispid);
	if (SUCCEEDED(hr))
		varRet = Invoke0(dispid);
	return varRet;
}
Beispiel #5
0
_variant_t CMObject::Invoke(LPCTSTR sName, long nParamCount, VARIANT * ...)
{
	_variant_t varRet;
	if(nParamCount<0 || p==NULL)
		return varRet;
	DISPID dispid;
	GetIDOfName(sName,&dispid);
	va_list argList;
	va_start(argList,nParamCount);
	varRet=InvokeV(dispid,nParamCount,argList);
	va_end(argList);
	return varRet;
}
Beispiel #6
0
HRESULT Invoke(IDispatch* pDisp, OLECHAR* wszMethod, VARIANT* pvResult, int nArgs, ...)
{
    HRESULT hr;
    DISPID dispID;
    va_list ap;
    int i;

    hr = GetIDOfName(pDisp, wszMethod, &dispID);
    if (FAILED(hr)) { return hr; }

    // 引数を VARAINT 配列に設定
    VARIANTARG *pvArgs = NULL;
    if(nArgs > 0){
        pvArgs = new VARIANTARG[nArgs];

        va_start(ap, nArgs);
        for(i=0;i<nArgs;i++){
            VariantInit(&pvArgs[i]);
            VariantCopy(&pvArgs[i], &va_arg(ap, VARIANT));
        }
        va_end(ap);
    }

    // DISPPARAMS の設定
    DISPPARAMS dispParams;
    dispParams.rgvarg = pvArgs;
    dispParams.rgdispidNamedArgs = NULL;
    dispParams.cArgs = nArgs;
    dispParams.cNamedArgs = 0;

    hr = pDisp->Invoke(
                dispID, IID_NULL,
                LOCALE_USER_DEFAULT,
                DISPATCH_METHOD,
                &dispParams, pvResult,
                NULL, NULL);

    // VARIANT 配列の後始末
    for(i=0;i<nArgs;i++){
        VariantClear(&pvArgs[i]);
    }

    if(pvArgs != NULL){
        delete[] pvArgs;
        pvArgs = NULL;
    }
    return hr;
}
Beispiel #7
0
HRESULT GetProperty(IDispatch* pDisp, OLECHAR* wszName, VARIANT* pvResult)
{
    HRESULT hr;
    DISPID dispID;
    DISPPARAMS dispParams = {NULL, NULL, 0, 0};

    hr = GetIDOfName(pDisp, wszName, &dispID);
    if (FAILED(hr)){ return hr; }

    hr = pDisp->Invoke(
                dispID, IID_NULL,
                LOCALE_USER_DEFAULT,
                DISPATCH_PROPERTYGET,
                &dispParams, pvResult,
                NULL, NULL);

    return hr;
}
HRESULT CComDispatchDriverEx::GetPropertyByName1(LPOLESTR lpszName, VARIANT vtValue, VARIANT *vtRet)
{
	DISPPARAMS dispParams;
	HRESULT hr = S_OK;
	DISPID	dwDisp = 0;
	hr = GetIDOfName(lpszName, &dwDisp);
	if(FAILED(hr))
		return hr;

	ZeroMemory(&dispParams, sizeof(DISPPARAMS));
	dispParams.cArgs = 1;
	dispParams.rgvarg = &vtValue;
	
	hr = p->Invoke(dwDisp, IID_NULL, 0, DISPATCH_PROPERTYGET, &dispParams,
		vtRet, NULL, NULL);

	return hr;
	
}