`
isiqi
  • 浏览: 16495359 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

VARIANT类型的用法

阅读更多
VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。

  对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
VARIANT va;
int a=2001;
va.vt=VT_I4;///指明整型数据
va.lVal=a; ///赋值

  对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:
unsigned char bVal; VT_UI1
short iVal; VT_I2
long lVal; VT_I4
float fltVal; VT_R4
double dblVal; VT_R8
VARIANT_BOOL boolVal; VT_BOOL
SCODE scode; VT_ERROR
CY cyVal; VT_CY
DATE date; VT_DATE
BSTR bstrVal; VT_BSTR
IUnknown FAR* punkVal; VT_UNKNOWN
IDispatch FAR* pdispVal; VT_DISPATCH
SAFEARRAY FAR* parray; VT_ARRAY|*
unsigned char FAR* pbVal; VT_BYREF|VT_UI1
short FAR* piVal; VT_BYREF|VT_I2
long FAR* plVal; VT_BYREF|VT_I4
float FAR* pfltVal; VT_BYREF|VT_R4
double FAR* pdblVal; VT_BYREF|VT_R8
VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL
SCODE FAR* pscode; VT_BYREF|VT_ERROR
CY FAR* pcyVal; VT_BYREF|VT_CY
DATE FAR* pdate; VT_BYREF|VT_DATE
BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR
IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN
IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH
SAFEARRAY FAR* FAR* pparray; VT_ARRAY|*
VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT
void FAR* byref; VT_BYREF

   _variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。

  例如:
long l=222;
ing i=100;
_variant_t lVal(l);
lVal = (long)i;

  COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:
COleVariant v3 = "字符串", v4 = (long)1999;
CString str =(BSTR)v3.pbstrVal;
long i = v4.lVal;
分享到:
评论

相关推荐

    VARIANT的用法

    4. 使用数据:读取VARIANT中的数据,同样需要根据`vt`选择正确的方法。 5. 清理VARIANT:使用`VariantClear`函数清理VARIANT,释放可能的资源。 VARIANT的使用使得在不同组件间传递复杂数据变得简单,但同时也需要...

    variant 用法

    // 设置variant类型为BSTR(Unicode字符串) var.bstrVal = SysAllocString(L"Hello, World!"); // 分配并设置字符串值 ``` `ReadMe.htm`文件可能是关于`variant`使用的一些指南或者示例代码的解释,可能包含了...

    _variant_t类型转换

    例如,如果目标是字符串类型,那么根据`_variant_t`的实际类型,可能需要调用不同的函数或方法来完成转换。如示例代码所示,对于`VT_I4`类型的`_variant_t`,可以使用`Format`函数将其转换为字符串;对于`VT_BOOL`...

    博途利用MOVE-BLK-VARIANT实现混合数据类型的块移动

    通过这个范例,学习者可以深入理解`MOVE-BLK-VARIANT`指令的使用方法,并将其应用于实际项目中,提升编程效率和程序的可维护性。同时,这也是一个很好的学习素材,可以帮助初学者更好地掌握西门子PLC编程技巧。

    ADO中_variant_t变量的使用与转换

    通常,这样的类会提供一系列静态方法或成员函数,用于将 Variant 数据安全地转换为其他C++基本类型,如int、double、std::string等。这些方法可能包括ToBool、ToInt32、ToDouble、ToString等,使得开发者无需关心...

    delphi variant的一些操作函数

    `VarFromDateTime()` 和 `VarToDateTime()` 分别用于将 Variant 转换为 TDateTime 类型和从 TDateTime 类型转换为 Variant。这些函数对于日期时间的处理非常有用。例如: ```delphi DateTimeVar := VarFromDateTime...

    Variant输入出参数,ocx传递byte数组,safearray使用方法,vc写ocx在vb下调用

    本话题主要聚焦于如何在VC(Visual C++)中编写OCX控件,并在VB(Visual Basic)中进行调用,特别是涉及到 Variant 输入/输出参数、通过 OCX 传递字节数组以及 SafeArray 的使用方法。 1. Variant 输入/输出参数: ...

    matlab与c/c++混合编程中VARIANT与c++数据类型转换类

    2. 设置VARIANT类型:使用`VariantClear()`和` VariantChangeType()`函数可以改变VARIANT的类型。例如,若要将VARIANT转换为整型,可以使用`VariantChangeType(&var, &var, 0, VT_I4)`。 3. 基本数据类型到VARIANT...

    TIA博途_通过Variant操作数组实现华氏度数据批量转换成摄氏度的具体方法.docx

    这两种指令分别用于读取和写入Variant类型的变量。 #### 三、程序编写步骤 1. **数据准备阶段**: - 使用VariantGet指令将输入的数据传送到一个临时数组中。这一步骤确保原始数据不会被修改,并且便于后续处理。 ...

    Java通过Jacob调用ActiveX,进行二进制数据交换

    对于二进制数据的交换必须使用Variant类型,但是在实际使用过程中使用VC2008ActiveX项目向导生成的ocx触发事件中带有Variant类型的参数时,ocx控件在触发事件消息之后就会出现内存异常,导致程序无法正常运行,而...

    delphi Variant传文件

    2. **转换为Variant**:读取到的字节流可以转换为Variant类型,以便于在网络或三层架构中传递。这可以通过创建一个Variant变量并赋值为字节数组来完成。 ```delphi var FileData: Variant; begin FileData := ...

    LPDISPATCH类型的接属性值,方法

    要为`LPDISPATCH`类型的接口设定或获取属性值,我们需要使用`IDispatch::GetProperty`和`IDispatch::PutProperty`方法。`GetProperty`用于获取属性值,而`PutProperty`用于设置属性值。这两个方法都通过一个整数`...

    BCB使用Variant和Automation对象操作Word.docx

    通过以上示例可以看出,虽然使用 Variant 和 Automation 对象在 BCB 中操作 Word 文档的方法与 VBA 有所不同,但都能有效地完成任务。对于 C++ 开发者而言,掌握这些技术可以在不需要依赖额外控件的情况下轻松集成 ...

    _bstr_t和_variant_t

    1. **数据库操作**:在使用 ADO 连接数据库时,经常需要将 SQL 语句作为 _bstr_t 类型传入 Open 方法中,而从数据库获取的数据通常以 _variant_t 形式返回。这些数据可以根据实际需要进一步转换为其他类型。 ```...

    C ++类型转换心得

    这里使用 _bstr_t 转换 Variant 的值,然后再次转换为 LPCTSTR,确保数据可以被其他接受字符串的函数或方法使用。 ```cpp var = (LPCTSTR)_bstr_t(strPath); subKey = (LPCTSTR)var; ``` 这里,var 被转换为 ...

    variant-type:Variant是一种数据结构,可用于表示任何其他数据类型

    变体类型Variant是一种数据结构( ),可用于表示任何其他数据类型。 您定义各种可能的类型,并且变体在任何时候只能代表这些类型之一。 一个很好的用法是代表您的React / Redux应用程序状态的一部分。 const Any = ...

    浅析C++中boost.variant的几种访问方法

     •在标准库容器中存储不同类型的方法  •变量访问的编译期检查  •高效的、基于栈的变量存储 Variant 库关注的是对一组限定类型的类型安全存储及取回,即非无类的联合。Boost.Variant 库与 Boost.Any 有许多共同...

    cpp-variant-type:简单易用且无效的模板变体类型

    简单用法 -> 允许编译器隐式检测类型 Variant intVariant = 5 ; Variant boolVariant ( true ); Variant stringVariant = std::string( " Hello String " ); std::cout << " intVariant value: " <() <...

    COM特殊数据类型使用演示

    本文将深入探讨这些数据类型的特性和使用方法,以及他们在实际应用中可能遇到的问题和注意事项。 1. BSTR(Basic String Type) BSTR是一种Unicode字符串类型,由COM提供,用于高效地存储和传递文本数据。BSTR字符...

Global site tag (gtag.js) - Google Analytics