道路管理专业大学排名: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给上层函数。

这个函数不能将一种类型的数组转化成另一种类型的数组。