IDispatch::GetIDsOfNames 메서드(oaidl.h)
단일 멤버 및 선택적 인수 이름 집합을 Invoke에 대한 후속 호출에 사용할 수 있는 해당 정수 DISPID 집합에 매핑합니다. Dispatch 함수 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 배열에 전달된 이름 중 하나에 해당하는 식별자(ID)가 포함됩니다. 첫 번째 요소는 멤버 이름을 나타냅니다. 후속 요소는 각 멤버의 매개 변수를 나타냅니다.
반환 값
이 메서드는 이러한 값 중 하나를 반환할 수 있습니다.
반환 코드 | Description |
---|---|
|
성공. |
|
메모리가 부족합니다. |
|
지정된 이름 중 하나 이상을 알 수 없습니다. 반환된 DISPID 배열에는 알 수 없는 이름에 해당하는 각 항목에 대한 DISPID_UNKNOWN 포함됩니다. |
|
LCID(로캘 식별자)가 인식되지 않았습니다. |
설명
IDispatch 구현은 양수 정수 ID 값을 지정된 이름과 연결할 수 있습니다. 기본값 또는 Value 속성에 대해 0이 예약되어 있습니다. –1은 알 수 없는 이름을 나타내기 위해 예약되어 있습니다. 및 기타 음수 값은 다른 용도로 정의됩니다. 예를 들어 GetIDsOfNames 가 호출되고 구현에서 하나 이상의 이름을 인식하지 못하는 경우 DISP_E_UNKNOWNNAME 반환하고 rgDispId 배열에 알 수 없는 이름에 해당하는 항목에 대한 DISPID_UNKNOWN 포함합니다.
멤버 및 매개 변수 DISPID는 개체의 수명 동안 일정하게 유지되어야 합니다. 이렇게 하면 클라이언트가 DISPID를 한 번 가져오고 나중에 사용할 수 있도록 캐시할 수 있습니다.
GetIDsOfNames가 둘 이상의 이름으로 호출되면 이름(rgszNames[0])이 멤버 이름에 해당하고 후속 이름은 멤버의 매개 변수 이름에 해당합니다.
컨텍스트에 따라 동일한 이름이 다른 DISPID에 매핑할 수 있습니다. 예를 들어 특정 인터페이스를 사용하는 멤버 이름, 다른 인터페이스의 멤버로 다른 ID 및 매개 변수로 나타날 때마다 다른 매핑으로 사용될 때 이름에 DISPID가 있을 수 있습니다.
GetIDsOfNames 는 IDispatch 클라이언트가 런타임에 이름에 바인딩할 때 사용됩니다. 대신 컴파일 시간에 바인딩하기 위해 IDispatch 클라이언트는 형식 설명 인터페이스에 설명된 형식 정보 인터페이스를 사용하여 이름을 DISPID에 매핑할 수 있습니다. 이렇게 하면 클라이언트가 컴파일 시간에 멤버에 바인딩하고 런타임에 GetIDsOfNames를 호출하지 않도록 할 수 있습니다. 컴파일 시 바인딩에 대한 설명은 형식 설명 인터페이스를 참조하세요.
GetIDsOfNames 구현은 대/소문자를 구분하지 않습니다. 대/소문자를 구분하는 이름 매핑이 필요한 사용자는 GetIDsOfNames를 호출하는 대신 형식 정보 인터페이스를 사용하여 이름을 DISPID에 매핑해야 합니다.
예제
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 를 호출하여 CLineColor 속성의 DISPID를 가져오는 ActiveX 클라이언트에 나타날 수 있습니다.
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 |