DispInvoke 함수(oleauto.h)
인터페이스에 대한 형식 정보가 제공되면 인터페이스에서 멤버 함수를 자동으로 호출합니다. 형식 정보가 있는 인터페이스를 설명하고 이 단일 호출을 사용하여 인터페이스에 대해 Invoke 를 구현할 수 있습니다.
구문
HRESULT DispInvoke(
void *_this,
ITypeInfo *ptinfo,
DISPID dispidMember,
WORD wFlags,
DISPPARAMS *pparams,
VARIANT *pvarResult,
EXCEPINFO *pexcepinfo,
UINT *puArgErr
);
매개 변수
_this
ptinfo에서 설명하는 IDispatch 인터페이스의 구현입니다.
ptinfo
인터페이스를 설명하는 형식 정보입니다.
dispidMember
호출할 멤버입니다. GetIDsOfNames 또는 개체의 설명서를 사용하여 DISPID를 가져옵니다.
wFlags
Invoke 호출의 컨텍스트를 설명하는 플래그입니다.
pparams
인수 배열, 명명된 인수에 대한 인수 DISPID 배열 및 배열의 요소 수에 대한 개수를 포함하는 구조체에 대한 포인터입니다.
pvarResult
결과를 저장할 위치에 대한 포인터이거나 호출자가 결과가 없을 경우 Null입니다. 이 인수는 DISPATCH_PROPERTYPUT 또는 DISPATCH_PROPERTYPUTREF 지정한 경우 무시됩니다.
pexcepinfo
예외 정보를 포함하는 구조체에 대한 포인터입니다. DISP_E_EXCEPTION 반환되는 경우 이 구조체를 채워야 합니다.
puArgErr
오류가 있는 첫 번째 인수의 rgvarg 내 인덱스입니다. 인수는 역순으로 pdispparams-rgvarg>에 저장되므로 첫 번째 인수는 배열에서 인덱스가 가장 높은 인수입니다. 이 매개 변수는 결과 반환 값이 DISP_E_TYPEMISMATCH 또는 DISP_E_PARAMNOTFOUND 경우에만 반환됩니다.
반환 값
반환 코드 | Description |
---|---|
|
성공. |
|
DISPPARAMS에 제공된 요소의 수는 메서드 또는 속성에서 허용하는 인수 수와 다릅니다. |
|
DISPPARAMS의 인수 중 하나는 유효한 변형 형식이 아닙니다. |
|
애플리케이션에서 예외를 발생시켜야 합니다. 이 경우 pexcepinfo 로 전달된 구조체를 채워야 합니다. |
|
요청된 멤버가 없습니다. |
|
이 IDispatch 구현은 명명된 인수를 지원하지 않습니다. |
|
DISPPARAMS의 인수 중 하나를 지정된 형식으로 강제 변환할 수 없습니다. |
|
매개 변수 ID 중 하나가 메서드의 매개 변수에 해당하지 않습니다. 이 경우 puArgErr 는 오류를 포함하는 첫 번째 인수로 설정됩니다. |
|
필수 매개 변수를 생략했습니다. |
|
하나 이상의 인수를 강제 변환할 수 없습니다. rgvarg 내에서 잘못된 형식을 가진 첫 번째 매개 변수의 인덱스는 puArgErr에 반환됩니다. |
|
매개 변수 중 하나가 잘못되었습니다. |
|
메모리가 부족하여 작업을 완료할 수 없습니다. |
ITypeInfo::Invoke 오류도 반환할 수 있습니다.
설명
매개 변수 _this 지연되는 인터페이스의 구현에 대한 포인터입니다. DispInvoke 는 스택 프레임을 빌드하고, 표준 강제 변환 규칙을 사용하여 매개 변수를 강제 변환하고, 스택에 푸시한 다음, VTBL에서 올바른 멤버 함수를 호출합니다.
예제
Lines 샘플 파일 Lines.cpp 다음 코드는 DispInvoke를 사용하여 Invoke를 구현합니다. 이 구현은 DispInvoke 를 사용하여 입력 인수의 유효성을 검사합니다. 보안 위험을 최소화하려면 입력 인수의 보다 강력한 유효성 검사를 수행하는 코드를 포함합니다.
STDMETHODIMP
CLines::Invoke(
DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS * pdispparams,
VARIANT * pvarResult,
EXCEPINFO* pexcepinfo,
UINT * puArgErr)
{
return DispInvoke(
this, m_ptinfo,
dispidMember, wFlags, pdispparams,
pvarResult, pexcepinfo, puArgErr);
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
헤더 | oleauto.h |
라이브러리 | OleAut32.lib |
DLL | OleAut32.dll |