tagVARIANT结构
来源:互联网 发布:时间煮雨 知乎 编辑:程序博客网 时间:2024/06/05 16:35
使用VARIANT来传递参数意味着非强类型语言(例如VBScript)能够调用使用强类型语言(C++)实现的方法。
VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
VARIANT 数据类型在文件OAIDL.IDL中定义如下:
- struct tagVARIANT {
- union {
- struct __tagVARIANT {
- VARTYPE vt;
- WORD wReserved1;
- WORD wReserved2;
- WORD wReserved3;
- union {
- ULONGLONG ullVal; /* VT_UI8 */
- LONGLONG llVal; /* VT_I8 */
- LONG lVal; /* VT_I4 */
- BYTE bVal; /* VT_UI1 */
- SHORT iVal; /* VT_I2 */
- FLOAT fltVal; /* VT_R4 */
- DOUBLE dblVal; /* VT_R8 */
- VARIANT_BOOL boolVal; /* VT_BOOL */
- _VARIANT_BOOL bool; /* (obsolete) */
- SCODE scode; /* VT_ERROR */
- CY cyVal; /* VT_CY */
- DATE date; /* VT_DATE */
- BSTR bstrVal; /* VT_BSTR */
- IUnknown * punkVal; /* VT_UNKNOWN */
- IDispatch * pdispVal; /* VT_DISPATCH */
- SAFEARRAY * parray; /* VT_ARRAY */
- BYTE * pbVal; /* VT_BYREF|VT_UI1 */
- SHORT * piVal; /* VT_BYREF|VT_I2 */
- LONG * plVal; /* VT_BYREF|VT_I4 */
- LONGLONG * pllVal; /* VT_BYREF|VT_I8 */
- FLOAT * pfltVal; /* VT_BYREF|VT_R4 */
- DOUBLE * pdblVal; /* VT_BYREF|VT_R8 */
- VARIANT_BOOL *pboolVal; /* VT_BYREF|VT_BOOL */
- _VARIANT_BOOL *pbool; /* (obsolete) */
- SCODE * pscode; /* VT_BYREF|VT_ERROR */
- CY * pcyVal; /* VT_BYREF|VT_CY */
- DATE * pdate; /* VT_BYREF|VT_DATE */
- BSTR * pbstrVal; /* VT_BYREF|VT_BSTR */
- IUnknown ** ppunkVal; /* VT_BYREF|VT_UNKNOWN */
- IDispatch ** ppdispVal; /* VT_BYREF|VT_DISPATCH */
- SAFEARRAY ** pparray; /* VT_BYREF|VT_ARRAY */
- VARIANT * pvarVal; /* VT_BYREF|VT_VARIANT */
- PVOID byref; /* Generic ByRef */
- CHAR cVal; /* VT_I1 */
- USHORT uiVal; /* VT_UI2 */
- ULONG ulVal; /* VT_UI4 */
- INT intVal; /* VT_INT */
- UINT uintVal; /* VT_UINT */
- DECIMAL * pdecVal; /* VT_BYREF|VT_DECIMAL */
- CHAR * pcVal; /* VT_BYREF|VT_I1 */
- USHORT * puiVal; /* VT_BYREF|VT_UI2 */
- ULONG * pulVal; /* VT_BYREF|VT_UI4 */
- ULONGLONG * pullVal; /* VT_BYREF|VT_UI8 */
- INT * pintVal; /* VT_BYREF|VT_INT */
- UINT * puintVal; /* VT_BYREF|VT_UINT */
- struct __tagBRECORD {
- PVOID pvRecord;
- IRecordInfo * pRecInfo;
- } __VARIANT_NAME_4; /* VT_RECORD */
- } __VARIANT_NAME_3;
- } __VARIANT_NAME_2;
- DECIMAL decVal;
- } __VARIANT_NAME_1;
- };
使用VARIANT和VARIANTARG数据结构要分两步完全。举一个例子,让我们考虑如下代码:
- long lValue = 999;
- VARIANT vParam;
- vParam.vt = VT_I4;
- vParam.lVal = lValue;
在第一行中指定数据类型。常量VT_I4表明在第二个域中将出现一个long型的数据。根据类型VARIANT的定义,可以得知,当一个long型数据存入VARIANT类型时,其第二个域使用的名称是lVal。
阅读全文
1 0
- tagVARIANT结构
- tagVARIANT结构
- tagVariant
- vs2010 c++ tagVARIANT 转换成 long
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- 结构
- Bentley.STAAD.RCDC.v6.0.1.1 1CD
- Android 自定义View (三) 圆环交替 等待效果
- 【reverse-linked-list-ii】
- 异步发送相关参数 producer.type async/sync 默认是sync 当满足以下其中一个条件的时候就触发 发送 batch.num.messages 异步发送 每次批量发送的条目
- numpy scipy matplotlib二次回首简看
- tagVARIANT结构
- 欢迎使用CSDN-markdown编辑器
- 怎么给MP4加密、选用隐大师U盘
- constructor-arg和 property的使用
- Linux 信号
- 使用Hive的正则表达式匹配数据时为NULL
- CTF学习站点总结
- 通过sql语句,根据时间值返回相应状态
- PHP图片与base64字符串相互转换函数