VARIANT 与其它类型的相互转换(原创) 我想刚做串口通信的同志们可能都遇到过VARIANT 类型变量的问题吧。这个问题前两天使我很苦恼,不知道是什么类型,更不知道如何相互转换,今天终于找到了一些信息。我把这些转换的例子贴出来,与大家共享。 // Declare variable VARIANT vtTest; CString strTest; CString strOut; int nTest; // CString->VARIANT->CString strTest = "陈水扁"; vtTest.vt = VT_BSTR; vtTest.bstrVal = strTest.AllocSysString(); strOut = vtTest.bstrVal; MessageBox(strOut); // int->VARIANT->int vtTest.vt = VT_R8; vtTest.iVal = 20; nTest = vtTest.iVal; strOut.Format("%d", nTest); MessageBox(strOut); 至于其它类型应该也是用类似的用法吧(哈哈,其它的我也没试)。下面是 MSDN 中关于这个变量的定义: VARIANT and VARIANTARG This structure is used to describe arguments passed within DISPPARAMS, and VARIANT to specify variant data that cannot be passed by reference. The VARIANT type cannot have the VT_BYREF bit set. typedef struct tagVARIANT { VARTYPE vt; unsigned short wReserved1; unsigned short wReserved2; unsigned short wReserved3; union { unsigned char bVal; short iVal; long lVal; float fltVal;. double dblVal; VARIANT_BOOL boolVal; SCODE scode; CY cyVal; DATE date; BSTR bstrVal; IUnknown FAR* punkVal; IDispatch FAR* pdispVal; SAFEARRAY FAR* parray; unsigned char FAR* pbVal; short FAR* piVal; long FAR* plVal; float FAR* pfltVal; double FAR* pdblVal; VARIANT_BOOL FAR* pboolVal; SCODE FAR* pscode; CY FAR* pcyVal; DATE FAR* pdate; BSTR FAR* pbstrVal; IUnknown FAR* FAR* ppunkVal; IDispatch FAR* FAR* ppdispVal; SAFEARRAY FAR* FAR* pparray; VARIANT FAR* pvarVal; void FAR* byref; }; }; typedef struct FARSTRUCT tagVARIANT VARIANT; typedef struct FARSTRUCT tagVARIANT VARIANTARG; Members vt w Reserved1 w Reserved2 w Reserved3 bVal VT_UI1. iVal VT_I2. lVal VT_I4. fltVal VT_R4. dblVal VT_R8. boo...