工控编程吧

标题: 上位机MFC如何给VARIANT类型赋值 [打印本页]

作者: qq263946146    时间: 2019-8-22 09:54
标题: 上位机MFC如何给VARIANT类型赋值
首先VARIANT是一个结构体,下面是MSDN的定义。有了这个概念后,就比较好理解它 的使用了。


  1. struct tagVARIANT {

  2.     union {

  3.         struct __tagVARIANT {

  4.             VARTYPE vt;

  5.             WORD    wReserved1;

  6.             WORD    wReserved2;

  7.             WORD    wReserved3;

  8.             union {

  9.                 ULONGLONG     ullVal;       /* VT_UI8               */

  10.                 LONGLONG      llVal;        /* VT_I8                */

  11.                 LONG          lVal;         /* VT_I4                */

  12.                 BYTE          bVal;         /* VT_UI1               */

  13.                 SHORT         iVal;         /* VT_I2                */

  14.                 FLOAT         fltVal;       /* VT_R4                */

  15.                 DOUBLE        dblVal;       /* VT_R8                */

  16.                 VARIANT_BOOL boolVal;      /* VT_BOOL              */

  17.                 _VARIANT_BOOL bool;         /* (obsolete)           */

  18.                 SCODE         scode;        /* VT_ERROR             */

  19.                 CY            cyVal;        /* VT_CY                */

  20.                 DATE          date;         /* VT_DATE              */

  21.                 BSTR          bstrVal;      /* VT_BSTR              */

  22.                 IUnknown *    punkVal;      /* VT_UNKNOWN           */

  23.                 IDispatch *   pdispVal;     /* VT_DISPATCH          */

  24.                 SAFEARRAY *   parray;       /* VT_ARRAY             */

  25.                 BYTE *        pbVal;        /* VT_BYREF|VT_UI1      */

  26.                 SHORT *       piVal;        /* VT_BYREF|VT_I2       */

  27.                 LONG *        plVal;        /* VT_BYREF|VT_I4       */

  28.                 LONGLONG *    pllVal;       /* VT_BYREF|VT_I8       */

  29.                 FLOAT *       pfltVal;      /* VT_BYREF|VT_R4       */

  30.                 DOUBLE *      pdblVal;      /* VT_BYREF|VT_R8       */

  31.                 VARIANT_BOOL *pboolVal;     /* VT_BYREF|VT_BOOL     */

  32.                 _VARIANT_BOOL *pbool;       /* (obsolete)           */

  33.                 SCODE *       pscode;       /* VT_BYREF|VT_ERROR    */

  34.                 CY *          pcyVal;       /* VT_BYREF|VT_CY       */

  35.                 DATE *        pdate;        /* VT_BYREF|VT_DATE     */

  36.                 BSTR *        pbstrVal;     /* VT_BYREF|VT_BSTR     */

  37.                 IUnknown **   ppunkVal;     /* VT_BYREF|VT_UNKNOWN */

  38.                 IDispatch ** ppdispVal;    /* VT_BYREF|VT_DISPATCH */

  39.                 SAFEARRAY ** pparray;      /* VT_BYREF|VT_ARRAY    */

  40.                 VARIANT *     pvarVal;      /* VT_BYREF|VT_VARIANT */

  41.                 PVOID         byref;        /* Generic ByRef        */

  42.                 CHAR          cVal;         /* VT_I1                */

  43.                 USHORT        uiVal;        /* VT_UI2               */

  44.                 ULONG         ulVal;        /* VT_UI4               */

  45.                 INT           intVal;       /* VT_INT               */

  46.                 UINT          uintVal;      /* VT_UINT              */

  47.                 DECIMAL *     pdecVal;      /* VT_BYREF|VT_DECIMAL */

  48.                 CHAR *        pcVal;        /* VT_BYREF|VT_I1       */

  49.                 USHORT *      puiVal;       /* VT_BYREF|VT_UI2      */

  50.                 ULONG *       pulVal;       /* VT_BYREF|VT_UI4      */

  51.                 ULONGLONG *   pullVal;      /* VT_BYREF|VT_UI8      */

  52.                 INT *         pintVal;      /* VT_BYREF|VT_INT      */

  53.                 UINT *        puintVal;     /* VT_BYREF|VT_UINT     */

  54.                 struct __tagBRECORD {

  55.                     PVOID         pvRecord;

  56.                     IRecordInfo * pRecInfo;

  57.                 } __VARIANT_NAME_4;         /* VT_RECORD            */

  58.             } __VARIANT_NAME_3;

  59.         } __VARIANT_NAME_2;

  60.         DECIMAL decVal;

  61.     } __VARIANT_NAME_1;

  62. };
复制代码
下面是这种就是与int float常用 类型间的转换


  1. void CDemoView::OnDraw(CDC* pDC)
  2. {
  3.         VARIANT var;
  4.         CString strText = _T("");

  5.         //初始化VARIANT类型变量
  6.         VariantInit(&var);
  7.        
  8.         //给VARIANT类型变量赋值
  9.         var.vt = VT_I4;
  10.         var.lVal = (long)100;
  11.         strText.Format(_T("var = %d"), var.lVal);
  12.         pDC->TextOut(100, 50, strText);

  13.         //清除VARIANT类型变量
  14.         VariantClear(&var);

  15.         //给VARIANT类型变量赋值
  16.         var.vt = VT_R4;
  17.         var.fltVal = 1.23f;
  18.         strText.Format(_T("var = %f"), var.fltVal);
  19.         pDC->TextOut(100, 100, strText);

  20.         //改变VARIANT类型变量数据类型
  21.         VariantChangeType(&var, &var, 0, VT_R8);
  22.         strText.Format(_T("var = %f"), var.dblVal);
  23.         pDC->TextOut(100, 150, strText);
  24. }
复制代码







欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4