IDispatch::GetIDsOfNames 方法 (oaidl.h)

將單一成員和選擇性的引數名稱集對應至一組對應的整數 DISPID,可在後續呼叫 Invoke時使用。 分派函式 DispGetIDsOfNames 提供 GetIDsOfNames 的標準實作

語法

HRESULT GetIDsOfNames(
  [in]  REFIID   riid,
  [in]  LPOLESTR *rgszNames,
  [in]  UINT     cNames,
  [in]  LCID     lcid,
  [out] DISPID   *rgDispId
);

參數

[in] riid

保留供未來使用。 必須是 IID_NULL。

[in] rgszNames

要對應的名稱陣列。

[in] cNames

要對應之名稱的計數。

[in] lcid

用於解譯名稱的地區設定內容。

[out] rgDispId

呼叫端配置的陣列,其中每個元素都包含識別碼 (識別碼) 對應至 rgszNames 陣列中傳遞的其中一個名稱。 第一個專案代表成員名稱。 後續元素代表每個成員的參數。

傳回值

這個方法可以傳回下列其中一個值。

傳回碼 說明
S_OK
成功。
E_OUTOFMEMORY
記憶體不足。
DISP_E_UNKNOWNNAME
未知的一或多個指定名稱。 DISPID 的傳回陣列包含對應至未知名稱之每個專案的DISPID_UNKNOWN。
DISP_E_UNKNOWNLCID
無法辨識 LCID) (地區設定識別碼。

備註

IDispatch實作可以將任何正整數識別碼值與指定名稱產生關聯。 零會保留給預設值或 Value 屬性;–1 保留來表示未知的名稱;和其他負值會針對其他用途定義。 例如,如果呼叫 GetIDsOfNames ,而且實作無法辨識一或多個名稱,則會傳回 DISP_E_UNKNOWNNAME,而 rgDispId 陣列包含對應至未知名稱之專案的DISPID_UNKNOWN。

成員和參數 DISPID 在物件的存留期內必須維持不變。 這可讓用戶端取得 DISPID 一次,並快取它們以供稍後使用。

使用多個名稱呼叫 GetIDsOfNames 時,第一個名稱 (rgszNames[0]) 會對應至成員名稱,而後續名稱會對應到成員的參數名稱。

相同的名稱可能會對應至不同的 DISPID,視內容而定。 例如,當名稱當做具有特定介面的成員名稱使用時,名稱可能會有 DISPID、不同的識別碼做為不同介面的成員,以及每次顯示為參數時的不同對應。

IDispatch用戶端在執行時間系結至名稱時,會使用GetIDsOfNames。 若要改為在編譯時期系結, IDispatch 用戶端可以使用 類型描述介面中所述的類型資訊介面,將名稱對應至 DISPID。 這可讓用戶端在編譯時期系結至成員,並避免在執行時間呼叫 GetIDsOfNames 。 如需在編譯時期系結的描述,請參閱類型描述介面。

GetIDsOfNames的實作不區分大小寫。 需要區分大小寫名稱對應的使用者應該使用類型資訊介面,將名稱對應至 DISPID,而不是呼叫 GetIDsOfNames

謹慎 您無法使用此方法來存取已動態新增的值,例如透過 JavaScript 新增的值。 請改用 IDispatchEx 介面的 GetDispID。 如需詳細資訊,請參閱 IDispatchEx 介面
 

範例

Lines 範例檔案 Lines.cpp 中的下列程式碼會實作 CLine 類別的 GetIDsOfNames 成員函式。 ActiveX 或 OLE 物件使用標準實作 DispGetIDsOfNames。 此實作依賴 DispGetIdsOfNames 來驗證輸入引數。 為了協助將安全性風險降到最低,請包含執行更強固輸入引數驗證的程式碼。

STDMETHODIMP 
CLine::GetIDsOfNames(
      REFIID riid,
      OLECHAR ** rgszNames,
      UINT cNames,
      LCID lcid,
      DISPID * rgDispId)
{
      return DispGetIDsOfNames(m_ptinfo, rgszNames, cNames, rgDispId);
}

下列程式碼可能會出現在呼叫 GetIDsOfNames 的 ActiveX 用戶端中,以取得 CLineColor 屬性的 DISPID。

HRESULT hresult;
IDispatch * pdisp = (IDispatch *)NULL;
DISPID dispid;
OLECHAR * szMember = "color";

// Code that sets a pointer to the dispatch (pdisp) is omitted.

hresult = pdisp->GetIDsOfNames(
   IID_NULL,
   &szMember,
   1, LOCALE_SYSTEM_DEFAULT,
   &dispid);

規格需求

   
目標平臺 Windows
標頭 oaidl.h

另請參閱

CreateStdDispatch

DispGetIDsOfNames

IDispatch