VariantChangeType 函数

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_BOOLVT_BSTR之间的转化。使用locale指定的语言或者本机语言

vt

需要强制转化的类型。如果这个函数的返回值码是S_OK,那么*pvarDestvt字段的值必定和这个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不返回错误,这个参数就讷能通过VARIANTARGbstrVal字段字节获得。如果返回的是DISP_E_TYPEMISMATCH,实现对象就会把*puArgErr设置为0,表示参数错误而且IDispatch::Invoke返回DISP_E_TYPEMISMATCH给上层函数。

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

 

转载于:https://www.cnblogs.com/caucyj/archive/2011/02/12/1952660.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值