共用方式為


VariantChangeTypeEx 函式 (oleauto.h)

重要

當 CY 值非常大時,此 API 會受到Microsoft 支援服務主題VarI8FromCy 所描述的問題所影響

使用 LCID,將變體從某個類型轉換為另一個類型。

語法

HRESULT VariantChangeTypeEx(
  [out] VARIANTARG       *pvargDest,
  [in]  const VARIANTARG *pvarSrc,
  [in]  LCID             lcid,
  [in]  USHORT           wFlags,
  [in]  VARTYPE          vt
);

參數

[out] pvargDest

目的變數。 如果這與 pvarSrc相同,則會就地轉換變體。

[in] pvarSrc

要轉換的變體。

[in] lcid

地區設定識別碼。 當來源或目的地 VARIANTARG 的類型VT_BSTR、VT_DISPATCH或VT_DATE時,LCID 會很有用。

[in] wFlags

標誌。

意義
VARIANT_NOVALUEPROP
藉由取得 Value 屬性,防止函式嘗試將物件強制轉型為基本類型。 應用程式只在必要時才應該設定此旗標,因為它會使其行為與其他應用程式不一致。
VARIANT_ALPHABOOL
將VT_BOOL值轉換為包含 「True」 或 「False」 的字串。
VARIANT_NOUSEROVERRIDE
若要對VT_BSTR進行轉換,請將LOCALE_NOUSEROVERRIDE傳遞至核心強制型轉常式。
VARIANT_LOCALBOOL
若要從VT_BOOL轉換成VT_BSTR和返回,請使用本機電腦上地區設定所指定的語言。

[in] vt

要轉換的目標類型。 如果傳回碼S_OK,則 *pvargDestvt欄位保證等於此值。

傳回值

此函式可以傳回下列其中一個值。

傳回碼 描述
S_OK
成功。
DISP_E_BADVARTYPE
Variant 類型不是有效的 Variant 類型。
DISP_E_OVERFLOW
pvarSrc所指向的資料不符合目的地類型。
DISP_E_TYPEMISMATCH
引數無法強制轉型為指定的型別。
E_INVALIDARG
其中一個引數無效。
E_OUTOFMEMORY
記憶體不足,無法完成作業。

備註

VariantChangeTypeEx函式會處理基本類型之間的強制型別, (包括數值對字串和字串對數值強制型轉) 。 已設定VT_BYREF的變體會藉由取得參考的值來強制轉型為值。 藉由叫用物件的 Value 屬性 (DISPID_VALUE) ,物件會強制轉型為值。

IDispatch::Invoke的實作者通常會決定要存取的成員,然後呼叫VariantChangeType以取得一或多個引數的值。 例如,如果 IDispatch 呼叫指定採用一個字串引數的 SetTitle 成員,實作者會呼叫 VariantChangeTypeEx 嘗試強制引數VT_BSTR。

如果 VariantChangeTypeEx 未傳回錯誤,則可以直接從 VARIANTARG 的 bstrVal 欄位取得引數。 如果 VariantChangeTypeEx 傳回DISP_E_TYPEMISMATCH,則實作者會將 *puArgErr 設定為 0 (指出錯誤) 中的引數,並從 IDispatch::Invoke傳回DISP_E_TYPEMISMATCH。

一種型別的陣列無法轉換成具有此函式之另一種型別的陣列。

注意 rgvarg 陣列中不應該變更 VARIANTARG 的類型。
 

需求

   
目標平台 Windows
標頭 oleauto.h
程式庫 OleAut32.lib
Dll OleAut32.dll

另請參閱

Variant 操作函式

VariantChangeType