看流星社区

 找回密码
 注册账号
查看: 3484|回复: 1

[VB] VB数组揭秘(od调试)

[复制链接]

该用户从未签到

发表于 2011-8-6 19:51:13 | 显示全部楼层 |阅读模式
网上貌似没有VB数组调试相关的内容
我也是参看搜索的一些信息自己慢慢研究出来的
没地方发就发这好了

首先VB的类型都是作为Variant来表达,想在OD下了解Variant的具体含义就得先弄懂Variant的结构
下面是Variant的完整结构:
typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;

struct tagVARIANT {
    union {
        struct __tagVARIANT {
            VARTYPE vt;
            WORD    wReserved1;
            WORD    wReserved2;
            WORD    wReserved3;
            union {
                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       */
                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      */
                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;
};


第一个word是VARENUM常数下面列出VARENUM常数的结构和代表的含义

typedef unsigned short VARTYPE;

/*
* VARENUM usage key,
*
* * [V] - may appear in a VARIANT
* * [T] - may appear in a TYPEDESC
* * [P] - may appear in an OLE property set
* * [S] - may appear in a Safe Array
*
*
*  VT_EMPTY            [V]   [P]     nothing
*  VT_NULL             [V]   [P]     SQL style Null
*  VT_I2               [V][T][P][S]  2 byte signed int
*  VT_I4               [V][T][P][S]  4 byte signed int
*  VT_R4               [V][T][P][S]  4 byte real
*  VT_R8               [V][T][P][S]  8 byte real
*  VT_CY               [V][T][P][S]  currency
*  VT_DATE             [V][T][P][S]  date
*  VT_BSTR             [V][T][P][S]  OLE Automation string
*  VT_DISPATCH         [V][T][P][S]  IDispatch *
*  VT_ERROR            [V][T][P][S]  SCODE
*  VT_BOOL             [V][T][P][S]  True=-1, False=0
*  VT_VARIANT          [V][T][P][S]  VARIANT *
*  VT_UNKNOWN          [V][T]   [S]  IUnknown *
*  VT_DECIMAL          [V][T]   [S]  16 byte fixed point
*  VT_RECORD           [V]   [P][S]  user defined type
*  VT_I1               [V][T][P]  signed char
*  VT_UI1              [V][T][P][S]  unsigned char
*  VT_UI2              [V][T][P][S]  unsigned short
*  VT_UI4              [V][T][P][S]  unsigned short
*  VT_I8                  [T][P]     signed 64-bit int
*  VT_UI8                 [T][P]     unsigned 64-bit int
*  VT_INT              [V][T][P][S]  signed machine int
*  VT_UINT             [V][T]   [S]  unsigned machine int
*  VT_VOID                [T]        C style void
*  VT_HRESULT             [T]        Standard return type
*  VT_PTR                 [T]        pointer type
*  VT_SAFEARRAY           [T]        (use VT_ARRAY in VARIANT)
*  VT_CARRAY              [T]        C style array
*  VT_USERDEFINED         [T]        user defined type
*  VT_LPSTR               [T][P]     null terminated string
*  VT_LPWSTR              [T][P]     wide null terminated string
*  VT_FILETIME               [P]     FILETIME
*  VT_BLOB                   [P]     Length prefixed bytes
*  VT_STREAM                 [P]     Name of the stream follows
*  VT_STORAGE                [P]     Name of the storage follows
*  VT_STREAMED_OBJECT        [P]     Stream contains an object
*  VT_STORED_OBJECT          [P]     Storage contains an object
*  VT_BLOB_OBJECT            [P]     Blob contains an object
*  VT_CF                     [P]     Clipboard format
*  VT_CLSID                  [P]     A Class ID
*  VT_VECTOR                 [P]     simple counted array
*  VT_ARRAY            [V]           SAFEARRAY*
*  VT_BYREF            [V]           void* for local use
*  VT_BSTR_BLOB                      Reserved for system use
*/

enum VARENUM
    {        VT_EMPTY        = 0,
        VT_NULL        = 1,
        VT_I2        = 2,
        VT_I4        = 3,
        VT_R4        = 4,
        VT_R8        = 5,
        VT_CY        = 6,
        VT_DATE        = 7,
        VT_BSTR        = 8,    字符串
        VT_DISPATCH        = 9,
        VT_ERROR        = 10,
        VT_BOOL        = 11,
        VT_VARIANT        = 12,
        VT_UNKNOWN        = 13,
        VT_DECIMAL        = 14,
        VT_I1        = 16,
        VT_UI1        = 17,
        VT_UI2        = 18,
        VT_UI4        = 19,
        VT_I8        = 20,
        VT_UI8        = 21,
        VT_INT        = 22,
        VT_UINT        = 23,
        VT_VOID        = 24,
        VT_HRESULT        = 25,
        VT_PTR        = 26,
        VT_SAFEARRAY        = 27,
        VT_CARRAY        = 28,
        VT_USERDEFINED        = 29,
        VT_LPSTR        = 30,
        VT_LPWSTR        = 31,
        VT_RECORD        = 36,
        VT_FILETIME        = 64,
        VT_BLOB        = 65,
        VT_STREAM        = 66,
        VT_STORAGE        = 67,
        VT_STREAMED_OBJECT        = 68,
        VT_STORED_OBJECT        = 69,
        VT_BLOB_OBJECT        = 70,
        VT_CF        = 71,
        VT_CLSID        = 72,
        VT_BSTR_BLOB        = 0xfff,
        VT_VECTOR        = 0x1000,
        VT_ARRAY        = 0x2000,   数组
        VT_BYREF        = 0x4000,
        VT_RESERVED        = 0x8000,
        VT_ILLEGAL        = 0xffff,
        VT_ILLEGALMASKED        = 0xfff,
        VT_TYPEMASK        = 0xfff
};


游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

发表于 2011-12-11 10:41:43 | 显示全部楼层
学习一下,谢谢搂住
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-24 00:21

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表