Val; int intVal; unsigned int uintVal; char FAR * pcVal; unsigned short FAR * puiVal; unsigned long FAR * pulVal; int FAR * pintVal; unsigned int FAR * puintVal; // VT_ARRAY|*. // VT_BYREF|VT_VARIANT. // Generic ByRef. // VT_I1. // VT_UI2. // VT_UI4. // VT_INT. // VT_UINT. // VT_BYREF|VT_I1. // VT_BYREF|VT_UI2. // VT_BYREF|VT_UI4. // VT_BYREF|VT_INT. //VT_BYREF|VT_UINT.
? ?
_variant_t 是 VARIANT 的 封 装 类 , 其 赋 值 可 以 使 用 强 制 类 型 转 换 , 其 构 造函数会自动处理这些数据类型。 使 用
时 需 加 上 #include
例如:
long l=222; ing i=100; _variant_t lVal(l); lVal = (long)i;
?
COleVariant 的 使 用 与 _variant_t 的 方 法 基 本 一 样 , 请 参 考 如 下 例 子 : COleVariant v3 = "字 符 串 ", v4 = (long)1999; CString str =(BSTR)v3.pbstrVal; long i = v4.lVal;
六 、 其 它 一 些 COM 数 据 类 型
?
根 据 ProgID 得 到 CLSID HRESULT CLSIDFromProgID( LPCOLESTR lpszProgID,LPCLSID pclsid); CLSID clsid; CLSIDFromProgID( L"MAPI.Folder",&;clsid);
?
根 据 CLSID 得 到 ProgID WINOLEAPI ProgIDFromCLSID( REFCLSID clsid,LPOLESTR * lplpszProgID); 例 如 我 们 已 经 定 义 了 CLSID_IApplication,下 面 的 代 码 得 到 ProgID LPOLESTR pProgID = 0; ProgIDFromCLSID( CLSID_IApplication,&;pProgID); ...///可 以 使 用 pProgID CoTaskMemFree(pProgID);//不 要 忘 记 释 放
七 、 ANSI 与 Unicode Unicode 称 为 宽 字 符 型 字 串 ,COM 里 使 用 的 都 是 Unicode 字 符 串 。
?
将 ANSI 转 换 到 Unicode (1)通 过 L 这 个 宏 来 实 现 , 例 如 : CLSIDFromProgID( L"MAPI.Folder",&;clsid); (2)通 过 MultiByteToWideChar 函 数 实 现 转 换 ,例 如 :
char *szProgID = "MAPI.Folder"; WCHAR szWideProgID[128]; CLSID clsid; long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWidePr ogID,sizeof(szWideProgID)); szWideProgID[lLen] = '\0'; (3)通 过 A2W 宏 来 实 现 ,例 如 : USE