dual (attributo)
L'attributo dual identifica un'interfaccia che espone proprietà e metodi tramite IDispatch e direttamente tramite VTBL.
[
uuid(uuid-number),
oleautomation,
dual
[ , optional-attribute-list]
]
interface interface-name
{
. . .
};
-
uuid-number
-
Specifica un numero di identificazione univoco universale per l'interfaccia
-
optional-attribute-list
-
Specifica un elenco di zero o più attributi MIDL aggiuntivi.
-
interface-name
-
Nome dell'interfaccia a cui verrà applicato l'attributo duale .
Le interfacce identificate dall'attributo duale devono essere compatibili con Automazione ed essere derivate da IDispatch. Questo attributo non è consentito nei caratteri dispinterfaces.
L'attributo dual crea un'interfaccia che è sia un'interfaccia IDispatch che un'interfaccia COM (Component Object Model). Le prime sette voci di VTBL per un'interfaccia doppia sono i sette membri di IDispatch e le voci rimanenti sono per l'accesso diretto ai membri dell'interfaccia doppia. Tutti i parametri e i tipi restituiti specificati per i membri di un'interfaccia doppia devono essere tipi compatibili con l'automazione.
Tutti i membri di un'interfaccia doppia devono passare un valore HRESULT come valore restituito dalla funzione. I membri, ad esempio le funzioni di accesso alle proprietà, che devono restituire altri valori, devono specificare l'ultimo parametro come out, retval, che indica un parametro di output che restituisce il valore della funzione. Inoltre, i membri che devono supportare più impostazioni locali devono passare un parametro lcid .
Una doppia interfaccia offre sia la velocità di associazione VTBL diretta che la flessibilità dell'associazione IDispatch . Per questo motivo, le interfacce duali sono consigliate quando possibile.
Nota
Se l'applicazione accede ai dati degli oggetti eseguendo il cast di questo puntatore all'interno della chiamata di interfaccia, è necessario controllare i puntatori VTBL nell'oggetto rispetto ai puntatori VTBL personalizzati per assicurarsi di essere connessi al proxy appropriato.
L'impostazione di dual su un'interfaccia implica che l'interfaccia è compatibile con Automazione e pertanto determina l'impostazione dei flag sia TYPEFLAG_FDUAL che di TYPEFLAG_FOLEAUTOMATION.
TYPEFLAG_FDUAL, TYPEFLAG_FOLEAUTOMATION
[
uuid(1e196b20-1f3c-1069-996b-00dd010fe676),
oleautomation, dual
]
interface IHello : IDispatch
{
//Diverse properties and methods defined here.
};