Condividi tramite


dispinterface (attributo)

L'istruzione dispinterface definisce un set di proprietà e metodi su cui è possibile chiamare IDispatch::Invoke. Una dispinterface può essere definita elencando in modo esplicito il set di metodi e proprietà supportati (sintassi 1) o elencando una singola interfaccia (sintassi 2).

[
    [attributes]
]
dispinterface dispinterface-name
{
    properties:
        property-list
    methods:
        method-list
};

[
  [attributes]
]
dispinterface dispinterface-name
{
    interface interface-name
};

Parametri

attributes

Specifica gli attributi che si applicano all'intera interfaccia dispinterfaccia. Vengono accettati gli attributi seguenti: [helpstring], [helpcontext], [helpfile], [hidden], [nonextensible], [oleautomation], [restricted], [uuid]e [version].

dispinterface-name

Nome in base al quale la dispinterface è nota nella libreria dei tipi. Questo nome deve essere univoco all'interno della libreria dei tipi.

property-list

(Sintassi 1) Elenco facoltativo di proprietà supportate dall'oggetto, dichiarato sotto forma di variabili. Questo è il formato breve per dichiarare le funzioni di proprietà nell'elenco dei metodi. Per informazioni dettagliate, vedere la sezione dei commenti.

method-list

(Sintassi 1) Elenco che comprende un prototipo di funzione per ogni metodo e proprietà nella dispinterface. Qualsiasi numero di definizioni di funzione può essere visualizzato nell'elenco dei metodi. Una funzione in methlist ha il formato seguente:

[attributi]returntype methname type paramname(params);

Gli attributi seguenti vengono accettati in un metodo in un dispinterface: [helpstring], [helpcontext], [propget], [propput], [propputref], [string]e [vararg]. Se viene specificato [vararg] , l'ultimo parametro deve essere una matrice sicura di tipo VARIANT .

L'elenco di parametri è un elenco delimitato da virgole, ognuno dei quali ha il formato seguente:

[attributi]

Il tipo può essere qualsiasi tipo dichiarato o predefinito o un puntatore a qualsiasi tipo. Gli attributi sui parametri sono:

[in], [out], [facoltativo], [string]

interface-name

(Sintassi 2) Nome dell'interfaccia da dichiarare come interfaccia IDispatch.

Commenti

Il compilatore MIDL accetta l'ordinamento dei parametri seguente (da sinistra a destra):

  1. Parametri obbligatori (parametri che non hanno gli attributi [defaultvalue] o [facoltativo]),
  2. parametri facoltativi con o senza l'attributo [defaultvalue],
  3. parametri con l'attributo [facoltativo] e senza l'attributo [defaultvalue],
  4. [ lcid] parametro, se disponibile,
  5. [ retval] parametro

Le funzioni del metodo vengono specificate esattamente come descritto nella pagina di riferimento per il modulo , ad eccezione del fatto che l'attributo [ entry] non è consentito. Si noti che STDOLE32. TLB (STDOLE. TLB nei sistemi a 16 bit) deve essere importato, perché una dispinterface eredita da IDispatch.

È possibile dichiarare le proprietà negli elenchi di proprietà o metodi. La dichiarazione delle proprietà nell'elenco delle proprietà non indica il tipo di accesso supportato dalla proprietà , ovvero get, put o putref. Specificare l'attributo [ readonly] per le proprietà che non supportano put o putref. Se si dichiarano le funzioni di proprietà nell'elenco dei metodi, le funzioni per una proprietà hanno tutti lo stesso identificatore.

Usando la prima sintassi, sono necessari i metodi e le proprietà: i tag. L'attributo [ id] è necessario anche per ogni membro. Ad esempio:

properties: 
    [id(0)] int Value;    // Default property. 
methods: 
    [id(1)] HRESULT Show();

A differenza dei membri dell'interfaccia, i membri dispinterface non possono usare l'attributo retval per restituire un valore oltre a un codice di errore HRESULT. L'attributo [ lcid] non è valido per i caratteri dispinterfaces, perché IDispatch::Invoke passa un LCID. Tuttavia, è possibile ripetere la richiesta di un'interfaccia che usa questi attributi.

Usando la seconda sintassi, le interfacce che supportano IDispatch e vengono dichiarate in precedenza in uno script ODL possono essere dichiarate nuovamente come interfacce IDispatch come indicato di seguito:

dispinterface helloPro 
{ 
    interface hello; 
};

Nell'esempio precedente vengono dichiarati tutti i membri di hello e tutti i membri che hello ereditano come IDispatch di supporto. In questo caso, se hello fosse dichiarato in precedenza con membri [lcid] e [retval] che hanno restituito HRESULTs, MkTypLib rimuoveva ogni parametro [lcid] e il tipo restituito HRESULT e contrassegnava invece il tipo restituito come quello del parametro [retval].

Nota

Lo strumento Mktyplib.exe è obsoleto. Usare invece il compilatore MIDL.

 

Le proprietà e i metodi di una dispinterface non fanno parte del VTBL della dispinterface. Di conseguenza, Non è possibile usare CreateStdDispatch e DispInvoke per implementare IDispatch::Invoke. La dispinterface viene usata quando un'applicazione deve esporre le funzioni non VTBL esistenti tramite Automazione. Queste applicazioni possono implementare IDispatch::Invoke esaminando il parametro dispidMember e chiamando direttamente la funzione corrispondente.

Esempi

[ 
    uuid(1e196b20-1f3c-1069-996b-00dd010fe676), 
    version(1.0), 
    helpstring("Useful help string."), 
    helpcontext(2480)
] 
dispinterface MyDispatchObject 
{ 
    properties: 
        [id(1)] int x;    //An integer property named x 
        [id(2)] BSTR y;   //A string property named y 
    methods: 
        [id(3)] HRESULT show();    //No arguments, no result 
        [id(11)] int computeit(int inarg, double *outarg); 
}; 
 
[
    uuid(1e123456-1f3c-1069-996b-00dd010fe676)
] 
dispinterface MyObject 
{ 
    properties: 
    methods: 
        [id(1), propget, bindable, defaultbind, displaybind] long x(); 
 
        [id(1), propput, bindable, defaultbind, 
         displaybind] HRESULT x(long rhs); 
}

Vedere anche

bindable

defaultbind

displaybind

helpcontext

helpfile

helpstring

Nascosto

Pollici

Interfaccia

TYPEFLAGS

Sintassi dei file ODL

Esempio di file ODL

Generazione di una libreria dei tipi con MIDL

Opzionale

Cambio

nonextensible

propget

propput

propputref

oleautomation

Limitato

string

uuid

vararg

Versione