COM实用入门教程第三讲.ppt

COM实用入门教程第三讲

VARIANT的使用 用VARIANT保存LONG类型。 VARIANT var; VariantInit(var); var.vt = VT_I4; //为什么vt是VT_I4呢? var.lVal = 100; VariantClear(var); //查看VARIANT结构体定义之前的注释可以查看到VT_I4与数据类型的对应关系,同时也可以查看到VT_I2,VT_R4等与相应数据类型的对应关系。 VARIANT的使用 用VARIANT保存FLOAT类型。 VARIANT var; VariantInit(var); var.vt = VT_R4; var.fltVal = 1.23f; VariantClear(var); VARIANT的使用 用VARIANT保存BSTR类型。 VARIANT var; VariantInit(var); var.vt = VT_BSTR; var.bstrVal = SysAllocString(LHello UIPower); VariantClear(var); VARIANT的使用 用VARIANT保存类型。 VARIANT var; VariantInit(var); var.vt = VT_BOOL; var.boolVal = VARIANT_FALSE; VariantClear(var); 从VARIANT读取相应类型的值。 if (var.vt == VT_I4) { long lValue = var.lVal; } else if (var.vt == VT_R4) { float fValue = var.fltVal; } else if (var.vt == VT_BSTR) { BSTR bstrValue = var.bstrVal; } else if (var.vt == VT_BOOL) { VARIANT_BOOL varbValue = var.boolVal; } 这一讲,主要讲解如下要点: 一、IDispatch的简介与作用; 二、常用的COM数据类型; 三、COM数据类型的转换; 四、VARIANT类型的派生类。 COM数据类型的转换 //LONG转换成FLOAT VARIANT var; VariantInit(var); var.vt = VT_I4; var.lVal = 100; VariantChangeType(var,var,0, VT_R4); if (var.vt == VT_R4) { float fValue = var.fltVal; } VariantClear(var); COM数据类型的转换 //LONG转换成BSTR VARIANT var; VariantInit(var); var.vt = VT_I4; var.lVal = 100; VariantChangeType(var,var,0, VT_BSTR); if (var.vt == VT_BSTR) { BSTR fValue = var.bstrVal; } VariantClear(var); 这一讲,主要讲解如下要点: 一、IDispatch的简介与作用; 二、常用的COM数据类型; 三、COM数据类型的转换; 四、VARIANT类型的派生类。 VARIANT类型的派生类 直接通过VARIANT API,比如VariantInit, VariantClear等来操作VARIANT比较麻烦,不方便。 给VARIANT赋值也需要设置VARIANT.vt,再设置VARIANT.lVal或VARIANT.fltVal等,也比较麻烦,不方便。 于是有人编写了派生类(子类)来继承VARIANT,然后在派生类中拓展VARIANT的使用方法,使VARIANT的使用更方便,更直接。 VARIANT类型的派生类 目前VARIANT的派生类主要有_variant_t,CComVariant,COleVariant。 _variant_t是VC为支持COM类型而自带的VARIANT派生类,在Visual Studio安装目录\VC\include\comutil.h中定义。 CComVariant是ATL库为支持COM类型而自带的VARIANT派生类,在Visual Studio 安装目录\VC\atlmfc\include\atlcomcli.h中定义。 COleVar

文档评论(0)

1亿VIP精品文档

相关文档