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;
分享到:
相关推荐
4. 使用数据:读取VARIANT中的数据,同样需要根据`vt`选择正确的方法。 5. 清理VARIANT:使用`VariantClear`函数清理VARIANT,释放可能的资源。 VARIANT的使用使得在不同组件间传递复杂数据变得简单,但同时也需要...
// 设置variant类型为BSTR(Unicode字符串) var.bstrVal = SysAllocString(L"Hello, World!"); // 分配并设置字符串值 ``` `ReadMe.htm`文件可能是关于`variant`使用的一些指南或者示例代码的解释,可能包含了...
例如,如果目标是字符串类型,那么根据`_variant_t`的实际类型,可能需要调用不同的函数或方法来完成转换。如示例代码所示,对于`VT_I4`类型的`_variant_t`,可以使用`Format`函数将其转换为字符串;对于`VT_BOOL`...
通过这个范例,学习者可以深入理解`MOVE-BLK-VARIANT`指令的使用方法,并将其应用于实际项目中,提升编程效率和程序的可维护性。同时,这也是一个很好的学习素材,可以帮助初学者更好地掌握西门子PLC编程技巧。
通常,这样的类会提供一系列静态方法或成员函数,用于将 Variant 数据安全地转换为其他C++基本类型,如int、double、std::string等。这些方法可能包括ToBool、ToInt32、ToDouble、ToString等,使得开发者无需关心...
`VarFromDateTime()` 和 `VarToDateTime()` 分别用于将 Variant 转换为 TDateTime 类型和从 TDateTime 类型转换为 Variant。这些函数对于日期时间的处理非常有用。例如: ```delphi DateTimeVar := VarFromDateTime...
本话题主要聚焦于如何在VC(Visual C++)中编写OCX控件,并在VB(Visual Basic)中进行调用,特别是涉及到 Variant 输入/输出参数、通过 OCX 传递字节数组以及 SafeArray 的使用方法。 1. Variant 输入/输出参数: ...
2. 设置VARIANT类型:使用`VariantClear()`和` VariantChangeType()`函数可以改变VARIANT的类型。例如,若要将VARIANT转换为整型,可以使用`VariantChangeType(&var, &var, 0, VT_I4)`。 3. 基本数据类型到VARIANT...
这两种指令分别用于读取和写入Variant类型的变量。 #### 三、程序编写步骤 1. **数据准备阶段**: - 使用VariantGet指令将输入的数据传送到一个临时数组中。这一步骤确保原始数据不会被修改,并且便于后续处理。 ...
对于二进制数据的交换必须使用Variant类型,但是在实际使用过程中使用VC2008ActiveX项目向导生成的ocx触发事件中带有Variant类型的参数时,ocx控件在触发事件消息之后就会出现内存异常,导致程序无法正常运行,而...
2. **转换为Variant**:读取到的字节流可以转换为Variant类型,以便于在网络或三层架构中传递。这可以通过创建一个Variant变量并赋值为字节数组来完成。 ```delphi var FileData: Variant; begin FileData := ...
要为`LPDISPATCH`类型的接口设定或获取属性值,我们需要使用`IDispatch::GetProperty`和`IDispatch::PutProperty`方法。`GetProperty`用于获取属性值,而`PutProperty`用于设置属性值。这两个方法都通过一个整数`...
通过以上示例可以看出,虽然使用 Variant 和 Automation 对象在 BCB 中操作 Word 文档的方法与 VBA 有所不同,但都能有效地完成任务。对于 C++ 开发者而言,掌握这些技术可以在不需要依赖额外控件的情况下轻松集成 ...
1. **数据库操作**:在使用 ADO 连接数据库时,经常需要将 SQL 语句作为 _bstr_t 类型传入 Open 方法中,而从数据库获取的数据通常以 _variant_t 形式返回。这些数据可以根据实际需要进一步转换为其他类型。 ```...
这里使用 _bstr_t 转换 Variant 的值,然后再次转换为 LPCTSTR,确保数据可以被其他接受字符串的函数或方法使用。 ```cpp var = (LPCTSTR)_bstr_t(strPath); subKey = (LPCTSTR)var; ``` 这里,var 被转换为 ...
变体类型Variant是一种数据结构( ),可用于表示任何其他数据类型。 您定义各种可能的类型,并且变体在任何时候只能代表这些类型之一。 一个很好的用法是代表您的React / Redux应用程序状态的一部分。 const Any = ...
•在标准库容器中存储不同类型的方法 •变量访问的编译期检查 •高效的、基于栈的变量存储 Variant 库关注的是对一组限定类型的类型安全存储及取回,即非无类的联合。Boost.Variant 库与 Boost.Any 有许多共同...
简单用法 -> 允许编译器隐式检测类型 Variant intVariant = 5 ; Variant boolVariant ( true ); Variant stringVariant = std::string( " Hello String " ); std::cout << " intVariant value: " <() <...
本文将深入探讨这些数据类型的特性和使用方法,以及他们在实际应用中可能遇到的问题和注意事项。 1. BSTR(Basic String Type) BSTR是一种Unicode字符串类型,由COM提供,用于高效地存储和传递文本数据。BSTR字符...