IPerPropertyBrowsing::GetPredefinedStrings 方法 (ocidl.h)

擷取指定屬性可接受之允許值的陣列描述字串。

語法

HRESULT GetPredefinedStrings(
  [in]  DISPID     dispID,
  [out] CALPOLESTR *pCaStringsOut,
  [out] CADWORD    *pCaCookiesOut
);

參數

[in] dispID

屬性的分派標識碼。

[out] pCaStringsOut

呼叫端配置的已計算數位結構的指標,其中包含字串指標之方法配置陣列的專案計數和位址。 這個方法也會為包含預先定義名稱的字串值配置記憶體,並將字元串指標儲存在數位中。 如果方法失敗,則不會配置記憶體,而且未定義結構的內容。

[out] pCaCookiesOut

呼叫端配置的計數陣列結構的指標,其中包含 DWORD 值之方法配置陣列的專案計數和位址。 陣列中的值可以傳遞至 IPerPropertyBrowsing::GetPredefinedValue ,以擷取 與 pCaStringsOut 內相同數位位置中名稱相關聯的值。 如果方法失敗,則不會配置記憶體,而且未定義結構的內容。

傳回值

這個方法可以傳回標準傳回值E_INVALIDARG、E_OUTOFMEMORY和E_UNEXPECTED,以及下列值。

傳回碼 描述
S_OK
已成功完成命令。
E_NOTIMPL
這個方法並未實作,而且不支援預先定義的名稱。
E_POINTER
pCaStringsOutpCaCookiesOut 中的位址無效。 例如,任一參數可以是 NULL

備註

pCaStringsOut 所指向數位中的每個字串在 pCaCookiesOut 所指向的計數陣列中有相符的標記,其中令牌可以傳遞至 IPerPropertyBrowsing::GetPredefinedValue,以取得與字串相對應的 VARIANT) (實際值。

使用預先定義的字串,呼叫者可以取得用來填入使用者介面元素的字串清單,例如下拉式清單框。 當用戶選取其中一個字串作為要指派給屬性的值時,呼叫端就可以透過 IPerPropertyBrowsing::GetPredefinedValue 取得對應的值。

來電者附註

傳遞至這個方法的 CALPOLESTRCADWORD 結構都是呼叫端配置的。 呼叫端負責從 CALPOLESTR 陣列以及 CALPOLESTR 結構釋放指向的每個字串。

所有記憶體都以 CoTaskMemAlloc 配置。 呼叫端負責使用 CoTaskMemFree 釋放字串和陣列。

從這個方法傳回時,呼叫端會負責所有這個記憶體,而且當不再需要時必須釋放它。 要達成此目的的程式代碼如下所示。

CALPOLESTR     castr; 
CWDWORD        cadw; 
ULONG          i; 
 
pIPerPropertyBrowsing->GetPredefinedStrings(dispID, &castr, &cadw); 
 
//...Use the strings and the cookies 
 
CoTaskMemFree((void *)cadw.pElems); 
 
for (i=0; i < castr.cElems; i++) 
    CoTaskMemFree((void *)castr.pElems[i]); 
 
CoTaskMemFree((void *)castr.pElems); 

實作者的注意事項

不需要預先定義的名稱和值支援。 如果您的物件不支援這些名稱,請從此方法傳回E_NOTIMPL。 如果未實作這個方法,則不得實作 IPerPropertyBrowsing::GetPredefinedValue

這個方法會填滿 CADWORDCALPOLESTR 結構的 cElems 和 pElems 成員。 它會使用 CoTaskMemAlloc 配置這些結構所指向的數位,並填滿這些數位。 在 CALPOLESTR 案例中,此方法也會使用 CoTaskMemAlloc 配置每個字串,並將每個字串指標儲存在數位中。

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 ocidl.h

另請參閱

CADWORD

CALPOLESTR

IPerPropertyBrowsing