Metodo IDispatch::Invoke (oaidl.h)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto. La funzione dispatch DispInvoke fornisce un'implementazione standard di Invoke.

Sintassi

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
);

Parametri

[in] dispIdMember

Identifica il membro. Usare GetIDsOfNames o la documentazione dell'oggetto per ottenere l'identificatore dispatch.

[in] riid

Riservato per usi futuri. Deve essere IID_NULL.

[in] lcid

Contesto di impostazioni locali all'interno del quale devono essere interpretati gli argomenti. Lcid viene usato dalla funzione GetIDsOfNames e viene passato anche a Invoke per consentire all'oggetto di interpretare i relativi argomenti specifici di impostazioni locali.

Le applicazioni che non supportano più lingue nazionali possono ignorare questo parametro. Per altre informazioni, vedere Supporto di più lingue nazionali ed esposizione di oggetti ActiveX.

[in] wFlags

Flag che descrivono il contesto della chiamata Invoke .

Valore Significato
DISPATCH_METHOD
Il membro viene richiamato come metodo. Se una proprietà ha lo stesso nome, è possibile impostare sia questo che il flag DISPATCH_PROPERTYGET.
DISPATCH_PROPERTYGET
Il membro viene recuperato come proprietà o membro dati.
DISPATCH_PROPERTYPUT
Il membro viene modificato come proprietà o membro dati.
DISPATCH_PROPERTYPUTREF
Il membro viene modificato da un'assegnazione di riferimento, anziché da un'assegnazione di valore. Questo flag è valido solo quando la proprietà accetta un riferimento a un oggetto .

[in, out] pDispParams

Puntatore a una struttura DISPPARAMS contenente una matrice di argomenti, una matrice di DISPID di argomenti per gli argomenti denominati e conta per il numero di elementi nelle matrici.

[out] pVarResult

Puntatore alla posizione in cui deve essere archiviato il risultato oppure NULL se il chiamante non prevede alcun risultato. Questo argomento viene ignorato se viene specificato DISPATCH_PROPERTYPUT o DISPATCH_PROPERTYPUTREF.

[out] pExcepInfo

Puntatore a una struttura contenente informazioni sull'eccezione. Questa struttura deve essere compilata se viene restituita DISP_E_EXCEPTION. Può essere NULL.

[out] puArgErr

Indice all'interno di rgvarg del primo argomento con un errore. Gli argomenti vengono archiviati in pDispParams-rgvarg> in ordine inverso, quindi il primo argomento è quello con l'indice più alto nella matrice. Questo parametro viene restituito solo quando il valore restituito risultante è DISP_E_TYPEMISMATCH o DISP_E_PARAMNOTFOUND. Questo argomento può essere impostato su Null. Per informazioni dettagliate, vedere Restituzione di errori.

Valore restituito

Questo metodo può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
Operazione completata.
DISP_E_BADPARAMCOUNT
Il numero di elementi forniti a DISPPARAMS è diverso dal numero di argomenti accettati dal metodo o dalla proprietà .
DISP_E_BADVARTYPE
Uno degli argomenti in DISPPARAMS non è un tipo variant valido.
DISP_E_EXCEPTION
L'applicazione deve generare un'eccezione. In questo caso, la struttura passata in pexcepinfo deve essere compilata.
DISP_E_MEMBERNOTFOUND
Il membro richiesto non esiste.
DISP_E_NONAMEDARGS
Questa implementazione di IDispatch non supporta argomenti denominati.
DISP_E_OVERFLOW
Impossibile forzare uno degli argomenti in DISPPARAMS al tipo specificato.
DISP_E_PARAMNOTFOUND
Uno degli ID parametro non corrisponde a un parametro nel metodo . In questo caso , puArgErr è impostato sul primo argomento che contiene l'errore.
DISP_E_TYPEMISMATCH
Non è stato possibile forzare uno o più argomenti. L'indice del primo parametro con il tipo non corretto all'interno di rgvarg viene restituito in puArgErr.
DISP_E_UNKNOWNINTERFACE

L'identificatore di interfaccia passato in riid non è IID_NULL.
DISP_E_UNKNOWNLCID
Il membro richiamato interpreta gli argomenti stringa in base all'LCID e l'LCID non viene riconosciuto. Se l'identificatore LCID non è necessario per interpretare gli argomenti, questo errore non deve essere restituito
DISP_E_PARAMNOTOPTIONAL
Un parametro obbligatorio è stato omesso.

Commenti

In genere, non è consigliabile implementare direttamente Invoke . Usare invece l'interfaccia dispatch per creare funzioni CreateStdDispatch e DispInvoke. Per informazioni dettagliate, vedere CreateStdDispatch, DispInvoke, Creating the IDispatch Interface (Creazione dell'interfaccia IDispatch ) ed Esposizione di oggetti ActiveX.

Se è necessario eseguire un'elaborazione specifica dell'applicazione prima di chiamare un membro, il codice deve eseguire le azioni necessarie e quindi chiamare ITypeInfo::Invoke per richiamare il membro. ITypeInfo::Invoke funziona esattamente come Invoke. Le implementazioni standard di Invoke create da CreateStdDispatch e DispInvoke rimandano a ITypeInfo::Invoke.

In un client ActiveX è necessario usare Invoke per ottenere e impostare i valori delle proprietà oppure per chiamare un metodo di un oggetto ActiveX. L'argomento dispIdMember identifica il membro da richiamare. I DISPID che identificano i membri sono definiti dall'implementatore dell'oggetto e possono essere determinati tramite la documentazione dell'oggetto, la funzione IDispatch::GetIDsOfNames o L'interfaccia ITypeInfo .

Quando si usa IDispatch::Invoke() con DISPATCH_PROPERTYPUT o DISPATCH_PROPERTYPUTREF, è necessario inizializzare in modo speciale gli elementi cNamedArgs e rgdispidNamedArgs della struttura DISPPARAMS con quanto segue:

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

Le informazioni seguenti indirizzano gli sviluppatori di client ActiveX e altri utenti che usano il codice per esporre oggetti ActiveX. Descrive il comportamento previsto dagli utenti di oggetti esposti.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione oaidl.h

Vedi anche

Idispatch