疑惑呀,不好意思就这点分了 那为大哥给详细讲讲COleVariant和VARIANT帮帮新手吧谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 COleVariant 继承于VARIANT,可以传递给需要VARIANT的函数。但又与CComVariant 不同,COleVariant 只有一个LPCTSTR的构造函数,不提供单独的LPCSTR和LPCWSTR的构造函数。在大多情况下,没有问题,因为总是愿意把字符串处理为LPCTSTR。但你必须知道这点。COleVariant 也有接受CString的构造函数。// 构造CString s1 = _T("tchar string");COleVariant v1 = _T("Bob"); // 从LPCTSTR构造COleVariant v2 = s1; // 从CString拷贝 转贴:struct tagVARIANT { VARTYPE vt; union { short iVal; // VT_I2. long lVal; // VT_I4. float fltVal; // VT_R4. double dblVal; // VT_R8. DATE date; // VT_DATE. BSTR bstrVal; // VT_BSTR. … short * piVal; // VT_BYREF|VT_I2. long * plVal; // VT_BYREF|VT_I4. float * pfltVal; // VT_BYREF|VT_R4. double * pdblVal; // VT_BYREF|VT_R8. DATE * pdate; // VT_BYREF|VT_DATE. BSTR * pbstrVal; // VT_BYREF|VT_BSTR. };}; 显然,VARIANT类型是一个C结构,它包含了一个类型成员vt、一些保留字节以及一个大的union类型。例如,如果vt为VT_I2,那么我们可以从iVal中读出VARIANT的值。同样,当给一个VARIANT变量赋值时,也要先指明其类型。例如:VARIANT va;:: VariantInit(&va); // 初始化int a = 2002;va.vt = VT_I4; // 指明long数据类型va.lVal = a; // 赋值 为了方便处理VARIANT类型的变量,Windows还提供了这样一些非常有用的函数: VariantInit —— 将变量初始化为VT_EMPTY; VariantClear —— 消除并初始化VARIANT; VariantChangeType —— 改变VARIANT的类型; VariantCopy —— 释放与目标VARIANT相连的内存并复制源VARIANT。 COleVariant类是对VARIANT结构的封装。它的构造函数具有极为强大大的功能,当对象构造时首先调用VariantInit进行初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作,当VARIANT对象不在有效范围时,它的析构函数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被自动清除。除此之外,COleVariant的赋值操作符在与VARIANT类型转换中为我们提供极大的方便。例如下面的代码:COleVariant v1("This is a test"); // 直接构造COleVariant v2 = "This is a test"; // 结果是VT_BSTR类型,值为"This is a test"COleVariant v3((long)2002);COleVariant v4 = (long)2002;// 结果是VT_I4类型,值为2002 请问关于显示桌面的问题! 高手帮忙.... SHDocVw::IWebBrowser2Ptr Quit函数问题。 在网页刷新时,如何使嵌入其中的Ocx控件不刷新???急 请问:关于多线程的?谢谢 谁有LED灯的类(用VCP写的) VC初学者的疑问。 CFtpConnection::Command问题 求个壳的源码 dll中如何使用MScomm? 求看Vc++源代码的网站谢谢1 *********请教联接库问题***********
CString s1 = _T("tchar string");
COleVariant v1 = _T("Bob"); // 从LPCTSTR构造
COleVariant v2 = s1; // 从CString拷贝
VARTYPE vt;
union {
short iVal; // VT_I2.
long lVal; // VT_I4.
float fltVal; // VT_R4.
double dblVal; // VT_R8.
DATE date; // VT_DATE.
BSTR bstrVal; // VT_BSTR.
…
short * piVal; // VT_BYREF|VT_I2.
long * plVal; // VT_BYREF|VT_I4.
float * pfltVal; // VT_BYREF|VT_R4.
double * pdblVal; // VT_BYREF|VT_R8.
DATE * pdate; // VT_BYREF|VT_DATE.
BSTR * pbstrVal; // VT_BYREF|VT_BSTR.
};
}; 显然,VARIANT类型是一个C结构,它包含了一个类型成员vt、一些保留字节以及一个大的union类型。例如,如果vt为VT_I2,那么我们可以从iVal中读出VARIANT的值。同样,当给一个VARIANT变量赋值时,也要先指明其类型。例如:VARIANT va;
:: VariantInit(&va); // 初始化
int a = 2002;
va.vt = VT_I4; // 指明long数据类型
va.lVal = a; // 赋值 为了方便处理VARIANT类型的变量,Windows还提供了这样一些非常有用的函数: VariantInit —— 将变量初始化为VT_EMPTY; VariantClear —— 消除并初始化VARIANT; VariantChangeType —— 改变VARIANT的类型; VariantCopy —— 释放与目标VARIANT相连的内存并复制源VARIANT。 COleVariant类是对VARIANT结构的封装。它的构造函数具有极为强大大的功能,当对象构造时首先调用VariantInit进行初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作,当VARIANT对象不在有效范围时,它的析构函数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被自动清除。除此之外,COleVariant的赋值操作符在与VARIANT类型转换中为我们提供极大的方便。例如下面的代码:COleVariant v1("This is a test"); // 直接构造
COleVariant v2 = "This is a test";
// 结果是VT_BSTR类型,值为"This is a test"
COleVariant v3((long)2002);
COleVariant v4 = (long)2002;
// 结果是VT_I4类型,值为2002