DISPATCH_PROPERTYPUT
时间: 2023-09-10 22:05:49 浏览: 47
DISPATCH_PROPERTYPUT 是用于 COM 组件中的 IDispatch 接口的方法之一,用于设置一个对象的属性值。它通常与其他方法一起使用,如DISPATCH_PROPERTYGET 用于获取属性值,DISPATCH_METHOD 用于调用对象的方法。在 COM 编程中,这些方法通常用于通过 IDispatch 接口访问 COM 对象的属性和方法。
相关问题
DISPATCH_PROPERTYPUT 封装方法
以下是一个示例的封装方法可以用于实现 DISPATCH_PROPERTYPUT:
```c++
HRESULT SetProperty(IDispatch* pDispatch, LPCWSTR propertyName, VARIANT value)
{
HRESULT hr = S_OK;
DISPID dispid;
BSTR bstrName = SysAllocString(propertyName);
if (bstrName == NULL)
{
return E_OUTOFMEMORY;
}
hr = pDispatch->GetIDsOfNames(IID_NULL, &bstrName, 1, LOCALE_USER_DEFAULT, &dispid);
if (SUCCEEDED(hr))
{
DISPPARAMS dispparams = { NULL, NULL, 1, 1 };
VARIANTARG vararg = { 0 };
vararg.vt = value.vt;
if (value.vt == VT_BSTR)
{
vararg.bstrVal = SysAllocString(value.bstrVal);
if (vararg.bstrVal == NULL)
{
hr = E_OUTOFMEMORY;
}
}
else
{
VariantCopy(&vararg, &value);
}
if (SUCCEEDED(hr))
{
dispparams.rgvarg = &vararg;
UINT uArgErr;
EXCEPINFO excepInfo = { 0 };
hr = pDispatch->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, &dispparams, NULL, &excepInfo, &uArgErr);
}
VariantClear(&vararg);
}
SysFreeString(bstrName);
return hr;
}
```
该方法的实现流程如下:
1. 通过 GetIDsOfNames 方法获取指定属性的 DISPID。
2. 创建一个包含指定属性值的 VARIANT 变量 vararg。
3. 创建一个包含一个 VARIANT 变量的 DISPPARAMS 结构体变量 dispparams。
4. 调用 IDispatch::Invoke 方法,设置 DISPPARAMS 中的 rgvarg 指向 vararg 变量的地址,并将 dwFlags 参数设置为 DISPATCH_PROPERTYPUT,以设置该属性的值。
5. 清理资源并返回方法的 HRESULT。
C语言 DISPATCH_PROPERTYPUT 写入值
DISPATCH_PROPERTYPUT是一种用于写入COM对象的属性值的宏。在C语言中使用该宏时,通常需要先声明一个IDispatch接口指针,然后使用该指针来调用DISPATCH_PROPERTYPUT宏来写入属性值。例如:
```c
IDispatch* pDispatch; // 声明IDispatch指针
// ...
// 使用DISPATCH_PROPERTYPUT宏写入属性值
DISPATCH_PROPERTYPUT(pDispatch, "Property", 0, &newValue);
```
上述示例中,pDispatch是一个IDispatch接口指针,"Property"是要设置的属性名称,0是属性的参数数量,&newValue是要设置的新属性值。
需要注意的是,使用DISPATCH_PROPERTYPUT宏时,需要先创建一个VARIANT结构体来存储要写入的属性值。例如,如果要写入一个整数值,可以这样创建VARIANT结构体:
```c
VARIANT newValue;
VariantInit(&newValue);
newValue.vt = VT_I4;
newValue.lVal = 123;
```
上述示例中,创建了一个新的VARIANT结构体newValue,并将其类型设置为VT_I4(即整数类型),将其值设置为123。最后,将指向newValue的指针传递给DISPATCH_PROPERTYPUT宏即可完成属性值的写入。