다음을 통해 공유


IDispatch::Invoke 메서드(oaidl.h)

개체에서 노출하는 메서드와 속성에 대한 액세스를 제공합니다. Dispatch 함수 DispInvokeInvoke의 표준 구현을 제공합니다.

구문

HRESULT Invoke(
  [in]      DISPID     dispIdMember,
  [in]      REFIID     riid,
  [in]      LCID       lcid,
  [in]      WORD       wFlags,
  [in, out] DISPPARAMS *pDispParams,
  [out]     VARIANT    *pVarResult,
  [out]     EXCEPINFO  *pExcepInfo,
  [out]     UINT       *puArgErr
);

매개 변수

[in] dispIdMember

멤버를 식별합니다. GetIDsOfNames 또는 개체의 설명서를 사용하여 디스패치 식별자를 가져옵니다.

[in] riid

다음에 사용하도록 예약됩니다. IID_NULL이어야 합니다.

[in] lcid

인수를 해석할 로캘 컨텍스트입니다. lcidGetIDsOfNames 함수에서 사용되며 개체가 로캘과 관련된 인수를 해석할 수 있도록 Invoke에도 전달됩니다.

여러 국가 언어를 지원하지 않는 애플리케이션은 이 매개 변수를 무시할 수 있습니다. 자세한 내용은 여러 국가 언어 지원ActiveX 개체 노출을 참조하세요.

[in] wFlags

Invoke 호출의 컨텍스트를 설명하는 플래그입니다.

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

[in, out] pDispParams

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

[out] pVarResult

결과를 저장할 위치에 대한 포인터이거나 호출자에게 결과가 필요하지 않은 경우 NULL입니다. DISPATCH_PROPERTYPUT 또는 DISPATCH_PROPERTYPUTREF 지정하면 이 인수는 무시됩니다.

[out] pExcepInfo

예외 정보가 포함된 구조체에 대한 포인터입니다. DISP_E_EXCEPTION 반환되는 경우 이 구조체를 채워야 합니다. NULL일 수 있습니다.

[out] puArgErr

오류가 있는 첫 번째 인수의 rgvarg 내 인덱스입니다. 인수는 역순으로 pDispParams-rgvarg>에 저장되므로 첫 번째 인수는 배열에서 인덱스가 가장 높은 인수입니다. 이 매개 변수는 결과 반환 값이 DISP_E_TYPEMISMATCH 또는 DISP_E_PARAMNOTFOUND 경우에만 반환됩니다. 이 인수는 null로 설정할 수 있습니다. 자세한 내용은 오류 반환을 참조하세요.

반환 값

이 메서드는 이러한 값 중 하나를 반환할 수 있습니다.

반환 코드 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_TYPEMISMATCH
하나 이상의 인수를 강제 변환할 수 없습니다. rgvarg 내에서 잘못된 형식을 가진 첫 번째 매개 변수의 인덱스가 puArgErr에 반환됩니다.
DISP_E_UNKNOWNINTERFACE

riid에 전달된 인터페이스 식별자가 IID_NULL 않습니다.
DISP_E_UNKNOWNLCID
호출되는 멤버는 LCID에 따라 문자열 인수를 해석하며 LCID는 인식되지 않습니다. 인수를 해석하는 데 LCID가 필요하지 않은 경우 이 오류가 반환되지 않아야 합니다.
DISP_E_PARAMNOTOPTIONAL
필수 매개 변수를 생략했습니다.

설명

일반적으로 Invoke 를 직접 구현해서는 안 됩니다. 대신 디스패치 인터페이스를 사용하여 CreateStdDispatchDispInvoke 함수를 만듭니다. 자세한 내용은 CreateStdDispatch, DispInvoke, IDispatch 인터페이스 만들기ActiveX 개체 노출을 참조하세요.

멤버를 호출하기 전에 일부 애플리케이션 관련 처리를 수행해야 하는 경우 코드는 필요한 작업을 수행한 다음 ITypeInfo::Invoke 를 호출하여 멤버를 호출해야 합니다. ITypeInfo::Invoke는 Invoke 와 똑같이 작동 합니다. CreateStdDispatchDispInvoke에서 만든 Invoke의 표준 구현은 ITypeInfo::Invoke로 연기됩니다.

ActiveX 클라이언트에서 Invoke 를 사용하여 속성 값을 가져와서 설정하거나 ActiveX 개체의 메서드를 호출해야 합니다. dispIdMember 인수는 호출할 멤버를 식별합니다. 멤버를 식별하는 DISPID는 개체의 구현자에 의해 정의되며 개체의 설명서, IDispatch::GetIDsOfNames 함수 또는 ITypeInfo 인터페이스를 사용하여 확인할 수 있습니다.

DISPATCH_PROPERTYPUT 또는 DISPATCH_PROPERTYPUTREF IDispatch::Invoke() 를 사용하는 경우 다음을 사용하여 DISPPARAMS 구조체의 cNamedArgsrgdispidNamedArgs 요소를 특별히 초기화해야 합니다.

DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;

다음 정보는 ActiveX 클라이언트 개발자와 코드를 사용하여 ActiveX 개체를 노출하는 다른 사용자를 다룹니다. 노출된 개체의 사용자가 예상해야 하는 동작을 설명합니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 oaidl.h

추가 정보

IDispatch