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 호출의 컨텍스트를 설명하는 플래그입니다.

의미
DISPATCH_METHOD
멤버가 메서드로 호출됩니다. 속성의 이름이 같으면 이 플래그와 DISPATCH_PROPERTYGET 플래그를 모두 설정할 수 있습니다.
DISPATCH_PROPERTYGET
멤버는 속성 또는 데이터 멤버로 검색됩니다.
DISPATCH_PROPERTYPUT
멤버가 속성 또는 데이터 멤버로 변경됩니다.
DISPATCH_PROPERTYPUTREF
멤버는 값 할당이 아닌 참조 할당에 의해 변경됩니다. 이 플래그는 속성이 개체에 대한 참조를 수락하는 경우에만 유효합니다.

pparams

인수 배열, 명명된 인수에 대한 인수 DISPID 배열 및 배열의 요소 수에 대한 개수를 포함하는 구조체에 대한 포인터입니다.

pvarResult

결과를 저장할 위치에 대한 포인터이거나 호출자가 결과가 없을 경우 Null입니다. 이 인수는 DISPATCH_PROPERTYPUT 또는 DISPATCH_PROPERTYPUTREF 지정한 경우 무시됩니다.

pexcepinfo

예외 정보를 포함하는 구조체에 대한 포인터입니다. DISP_E_EXCEPTION 반환되는 경우 이 구조체를 채워야 합니다.

puArgErr

오류가 있는 첫 번째 인수의 rgvarg 내 인덱스입니다. 인수는 역순으로 pdispparams-rgvarg>에 저장되므로 첫 번째 인수는 배열에서 인덱스가 가장 높은 인수입니다. 이 매개 변수는 결과 반환 값이 DISP_E_TYPEMISMATCH 또는 DISP_E_PARAMNOTFOUND 경우에만 반환됩니다.

반환 값

반환 코드 Description
S_OK
성공.
DISP_E_BADPARAMCOUNT
DISPPARAMS에 제공된 요소의 수는 메서드 또는 속성에서 허용하는 인수 수와 다릅니다.
DISP_E_BADVARTYPE
DISPPARAMS의 인수 중 하나는 유효한 변형 형식이 아닙니다.
DISP_E_EXCEPTION
애플리케이션에서 예외를 발생시켜야 합니다. 이 경우 pexcepinfo 로 전달된 구조체를 채워야 합니다.
DISP_E_MEMBERNOTFOUND
요청된 멤버가 없습니다.
DISP_E_NONAMEDARGS
IDispatch 구현은 명명된 인수를 지원하지 않습니다.
DISP_E_OVERFLOW
DISPPARAMS의 인수 중 하나를 지정된 형식으로 강제 변환할 수 없습니다.
DISP_E_PARAMNOTFOUND
매개 변수 ID 중 하나가 메서드의 매개 변수에 해당하지 않습니다. 이 경우 puArgErr 는 오류를 포함하는 첫 번째 인수로 설정됩니다.
DISP_E_PARAMNOTOPTIONAL
필수 매개 변수를 생략했습니다.
DISP_E_TYPEMISMATCH
하나 이상의 인수를 강제 변환할 수 없습니다. rgvarg 내에서 잘못된 형식을 가진 첫 번째 매개 변수의 인덱스는 puArgErr에 반환됩니다.
E_INVALIDARG
매개 변수 중 하나가 잘못되었습니다.
E_OUTOFMEMORY
메모리가 부족하여 작업을 완료할 수 없습니다.
 

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

추가 정보

CreateStdDispatch

Dispatch API 함수 만들기

IDispatch

IDispatch::Invoke

ITypeInfo::Invoke