道路管理专业大学排名:variantchangetype
来源:百度文库 编辑:九乡新闻网 时间:2024/05/03 10:15:33
variantchangetype 函数
原始地址:http://msdn.microsoft.com/en-us/library/ms221258.aspx
将variant变量从一个类型转化到另外一个类型
hresult variantchangetype(
variantarg *pvargdest,
variantarg *pvarsrc,
unsigned short wflags,
vartype vt
);
参数:
pvargdest
指向目标variant的指针。 如果这个参数和pvarsrc是相同的,这个参数就能被适当的转化。
pvarsrc
指向需要被强制转化的变量的指针
wflags
强制转化的控制符。可用的值:
· variant_novalueprop:这个参数是为了避免一个对象通过读取其value属性而被强制转化成基本数据类型。应用程序中要慎用该参数。因为可能造成不同的用程序中这个函数的行为不一致。
· variant_alphabool:将布尔类型vt_bool的变量转化成为”true” 或者”false”。
· variant_nouseroverride:用于对vt_bstr类型的变量进行转化,它会给底层的转化运行时传递locale_nouseroverride参数。
· variant_localbool:用于vt_bool和vt_bstr之间的转化。使用locale指定的语言或者本机语言
vt
需要强制转化的类型。如果这个函数的返回值码是s_ok,那么*pvardest的vt字段的值必定和这个vt值相同。
返回值:
从返回的hresult中获得值有如下几个:
值
含义
s_ok
成功
disp_e_badvartype
vt的值不是合法的variant类型
disp_e_overflow
pvarsrc的类型与目标类型不匹配
disp_e_typemismatch
参数不能被强制转化到指定类型
e_invalidarg
参数不合法
e_outofmemory
内存分配错误
注释:
variantchangetype主要用于基本数据类型之间的强制转化,包括数字-字符和字符-数字转化。pvarsrc在转化过程中被修改。例如,源变量是vt_bool,目标变量是vt_uint,那源变量会先被转转化成为vt_i2,然后继续转化。含有vt_byref集合的变量,会被转化成引用的值。对象类型的变量则是通过调用对象的value属性(dispid_value)来转化。
通常情况下,idispatch::invoke的实现对象会决定哪些成员被读取,然后调用variantchangetype来获得参数值。例如,idispatch指定了settitle函数的参数是string类型,那么实现对象就需要调用variantchangetype来把参数转化成vt_bstr。如果variantchangetype不返回错误,这个参数就讷能通过variantarg的bstrval字段字节获得。如果返回的是disp_e_typemismatch,实现对象就会把*puargerr设置为0,表示参数错误而且idispatch::invoke返回disp_e_typemismatch给上层函数。
这个函数不能将一种类型的数组转化成另一种类型的数组。
原始地址:http://msdn.microsoft.com/en-us/library/ms221258.aspx
将variant变量从一个类型转化到另外一个类型
hresult variantchangetype(
variantarg *pvargdest,
variantarg *pvarsrc,
unsigned short wflags,
vartype vt
);
参数:
pvargdest
指向目标variant的指针。 如果这个参数和pvarsrc是相同的,这个参数就能被适当的转化。
pvarsrc
指向需要被强制转化的变量的指针
wflags
强制转化的控制符。可用的值:
· variant_novalueprop:这个参数是为了避免一个对象通过读取其value属性而被强制转化成基本数据类型。应用程序中要慎用该参数。因为可能造成不同的用程序中这个函数的行为不一致。
· variant_alphabool:将布尔类型vt_bool的变量转化成为”true” 或者”false”。
· variant_nouseroverride:用于对vt_bstr类型的变量进行转化,它会给底层的转化运行时传递locale_nouseroverride参数。
· variant_localbool:用于vt_bool和vt_bstr之间的转化。使用locale指定的语言或者本机语言
vt
需要强制转化的类型。如果这个函数的返回值码是s_ok,那么*pvardest的vt字段的值必定和这个vt值相同。
返回值:
从返回的hresult中获得值有如下几个:
值
含义
s_ok
成功
disp_e_badvartype
vt的值不是合法的variant类型
disp_e_overflow
pvarsrc的类型与目标类型不匹配
disp_e_typemismatch
参数不能被强制转化到指定类型
e_invalidarg
参数不合法
e_outofmemory
内存分配错误
注释:
variantchangetype主要用于基本数据类型之间的强制转化,包括数字-字符和字符-数字转化。pvarsrc在转化过程中被修改。例如,源变量是vt_bool,目标变量是vt_uint,那源变量会先被转转化成为vt_i2,然后继续转化。含有vt_byref集合的变量,会被转化成引用的值。对象类型的变量则是通过调用对象的value属性(dispid_value)来转化。
通常情况下,idispatch::invoke的实现对象会决定哪些成员被读取,然后调用variantchangetype来获得参数值。例如,idispatch指定了settitle函数的参数是string类型,那么实现对象就需要调用variantchangetype来把参数转化成vt_bstr。如果variantchangetype不返回错误,这个参数就讷能通过variantarg的bstrval字段字节获得。如果返回的是disp_e_typemismatch,实现对象就会把*puargerr设置为0,表示参数错误而且idispatch::invoke返回disp_e_typemismatch给上层函数。
这个函数不能将一种类型的数组转化成另一种类型的数组。