Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Windows offre diversi metodi per il trasferimento di dati tra applicazioni. Un metodo consiste nell'usare il protocollo DDE (Dynamic Data Exchange). Il protocollo DDE è un set di messaggi e linee guida. Invia messaggi tra applicazioni che condividono dati e usa la memoria condivisa per scambiare dati tra applicazioni. Le applicazioni possono usare il protocollo DDE per i trasferimenti di dati monouso e per gli scambi continui in cui le applicazioni inviano aggiornamenti l'una all'altra man mano che diventano disponibili nuovi dati.
Windows supporta anche Dynamic Data Exchange Management Library (DDEML). DDEML è una libreria a collegamento dinamico (DLL) che le applicazioni possono usare per condividere i dati. DDEML fornisce funzioni e messaggi che semplificano l'attività di aggiunta di funzionalità DDE a un'applicazione. Anziché inviare, registrare ed elaborare direttamente i messaggi DDE, un'applicazione usa le funzioni DDEML per gestire le conversazioni DDE. Una conversazione DDE è l'interazione tra applicazioni client e server.
DDEML offre anche una funzionalità per la gestione delle stringhe e dei dati condivisi dalle applicazioni DDE. Invece di usare atomi e puntatori a oggetti di memoria condivisa, le applicazioni DDE creano e scambiano handle di stringa, che identificano le stringhe, e handle di dati, che identificano gli oggetti di memoria. DDEML consente anche a un'applicazione server di registrare i nomi di servizio supportati. I nomi vengono trasmessi ad altre applicazioni nel sistema, che possono usare i nomi per connettersi al server. DDEML garantisce inoltre la compatibilità tra le applicazioni DDE forzandole a implementare il protocollo DDE in modo coerente.
Le applicazioni esistenti che usano il protocollo DDE basato su messaggi sono completamente compatibili con quelle che usano DDEML. Ovvero, un'applicazione che usa DDE basata su messaggi può stabilire conversazioni ed eseguire transazioni con applicazioni che usano DDEML. A causa dei numerosi vantaggi di DDEML, le nuove applicazioni devono usarlo anziché i messaggi DDE. Per usare gli elementi API di DDEML, è necessario includere il file di intestazione DDEML nei file di origine, collegarsi alla libreria DDEML e assicurarsi che la libreria di collegamento dinamico DDEML si trovi nel percorso di ricerca del sistema.
Protocollo Dynamic Data Exchange
Poiché Windows dispone di un'architettura basata su messaggi, il passaggio dei messaggi è il metodo più appropriato per il trasferimento automatico delle informazioni tra applicazioni. Tuttavia, i messaggi contengono solo due parametri (wParam e lParam) per il passaggio dei dati. Di conseguenza, questi parametri devono fare riferimento indirettamente ad altre parti di dati quando più di poche parole di informazioni passano tra le applicazioni. Il protocollo DDE definisce esattamente come le applicazioni devono usare i parametri wParam e lParam per passare parti di dati più grandi tramite atom globali e handle di memoria condivisa. Il protocollo DDE include regole specifiche per l'allocazione e l'eliminazione di atomi globali e oggetti di memoria condivisa.
Un atomo globale è un riferimento a una stringa di caratteri. Nel protocollo DDE, gli atom identificano le applicazioni che scambiano dati, la natura dei dati scambiati e gli elementi di dati stessi. Per altre informazioni sugli atomi, vedere Informazioni sugli atomi.
Utilizzi di Windows Dynamic Data Exchange
DDE è più appropriato per gli scambi di dati che non richiedono l'interazione dell'utente in corso. In genere, un'applicazione fornisce un metodo per consentire all'utente di stabilire il collegamento tra le applicazioni che scambiano dati. Una volta stabilito il collegamento, tuttavia, le applicazioni scambiano dati senza ulteriore coinvolgimento dell'utente.
DDE può essere usato per implementare un'ampia gamma di funzionalità dell'applicazione, ad esempio:
- Collegamento a dati in tempo reale, ad esempio aggiornamenti del mercato azionario, strumenti scientifici o controllo del processo.
- Creazione di documenti composti, ad esempio un documento di elaborazione delle parole che include un grafico prodotto da un'applicazione grafica. Usando DDE, il grafico cambierà quando i dati di origine vengono modificati, mentre il resto del documento rimane invariato.
- Esecuzione di query sui dati tra applicazioni, ad esempio un foglio di calcolo che esegue query su un database per gli account scaduti.
Dynamic Data Exchange dal punto di vista dell'utente
L'esempio seguente illustra come due applicazioni DDE possono cooperare, come illustrato dal punto di vista dell'utente.
Un utente di un foglio di calcolo vuole utilizzare Microsoft Excel per tenere traccia del prezzo di un determinato titolo su New York Stock Exchange. L'utente dispone di un'applicazione denominata Quote che a sua volta ha accesso ai dati DINCE. La conversazione DDE tra Excel e Offerta avviene nel modo seguente:
- L'utente avvia la conversazione specificando il nome dell'applicazione (Quote) che fornirà i dati e l'argomento specifico di interesse (NYSE). La conversazione DDE risultante viene usata per richiedere quotazioni su azioni specifiche.
- Excel trasmette i nomi dell'applicazione e degli argomenti a tutte le applicazioni DDE attualmente in esecuzione nel sistema. Il preventivo risponde, stabilendo una conversazione con Excel sull'argomento NYSE.
- L'utente può quindi creare una formula del foglio di calcolo in una cella che richiede l'aggiornamento automatico del foglio di calcolo ogni volta che viene modificata una determinata offerta azionaria. Ad esempio, l'utente potrebbe richiedere un aggiornamento automatico ogni volta che si verifica una modifica nel prezzo di vendita delle azioni ZAXX specificando la formula di Excel seguente: ='Quote'|'NYSE'!ZAXX
- L'utente può terminare l'aggiornamento automatico dell'offerta azionaria ZAXX in qualsiasi momento. Altri collegamenti dati finanziari che sono stati stabiliti separatamente (ad esempio per le quotazioni di altri titoli) rimarranno comunque attivi sotto la stessa conversazione NYSE.
- L'utente può anche terminare l'intera conversazione tra Excel e Quotazione riguardo all'argomento NYSE, in modo che non sia possibile stabilire link di dati specifici su tale argomento senza avviare una nuova conversazione.
Concetti relativi a Dynamic Data Exchange
Le sezioni seguenti illustrano i concetti e la terminologia importanti chiave per comprendere lo scambio di dati dinamici.
- Client, server e conversazione
- Nomi di applicazioni, argomenti e elementi
- Argomento di sistema
- Collegamenti dati permanenti
- Atom e oggetti di memoria condivisa
Client, server e conversazione
Due applicazioni che partecipano a DDE vengono dette coinvolte in una conversazione DDE. L'applicazione che avvia la conversazione è l'applicazione client DDE; l'applicazione che risponde al client è l'applicazione server DDE. Un'applicazione può interagire contemporaneamente in diverse conversazioni, fungendo da client in alcuni e come server in altri.
Una conversazione DDE viene eseguita tra due finestre, una per ognuna delle applicazioni partecipanti. Una finestra può essere la finestra principale dell'applicazione; una finestra associata a un documento specifico, come in un'applicazione MDI (Multiple-Document Interface); o una finestra nascosta (invisibile) il cui unico scopo è elaborare i messaggi DDE.
Poiché una conversazione DDE viene identificata dalla coppia di handle delle finestre impegnate nella conversazione, nessuna finestra dovrebbe essere impegnata in più di una conversazione con un'altra finestra. L'applicazione client o l'applicazione server devono fornire una finestra diversa per ognuna delle conversazioni con un server o un'applicazione client specifica.
Un'applicazione può garantire che una coppia di finestre client e server non sia mai coinvolta in più conversazioni creando una finestra nascosta per ogni conversazione. L'unico scopo di questa finestra è elaborare i messaggi DDE.
Nomi di applicazioni, argomenti e elementi
Il protocollo DDE identifica le unità di dati passate tra il client e il server con una gerarchia a tre livelli di nomi di applicazioni, argomenti e elementi.
Ogni conversazione DDE è definita in modo univoco dal nome e dall'argomento dell'applicazione. All'inizio di una conversazione DDE, il client e il server determinano il nome e l'argomento dell'applicazione. Il nome dell'applicazione è in genere il nome dell'applicazione server. Ad esempio, quando Excel funge da server in una conversazione, il nome dell'applicazione è Excel.
L'argomento DDE è una classificazione generale dei dati in cui più elementi di dati possono essere "discussi" (scambiati) durante la conversazione. Per le applicazioni che operano su documenti basati su file, l'argomento è in genere un nome file. Per altre applicazioni, l'argomento è un nome specifico dell'applicazione.
Poiché la finestra client e server gestisce insieme un'identificazione di una conversazione DDE, il nome e l'argomento dell'applicazione che definiscono una conversazione non possono essere modificati durante il corso della conversazione.
Un elemento di dati DDE è costituito da informazioni correlate all'argomento della conversazione scambiata tra le applicazioni. I valori per l'elemento di dati possono essere passati dal server al client o dal client al server. I dati possono essere trasferiti con uno dei formati standard degli Appunti o con un formato registrato. Un formato speciale registrato denominato Link identifica un elemento in una conversazione DDE. Per ulteriori informazioni sui formati della Clipboard, vedere Clipboard.
Argomento di sistema
Le applicazioni devono supportare sempre l'argomento di sistema. In questo argomento viene fornito un contesto per informazioni che potrebbero essere di interesse generale per un'altra applicazione.
È necessario eseguire il rendering dei valori degli elementi di dati nel formato degli Appunti CF_TEXT . I singoli elementi dei valori degli elementi per un argomento di sistema devono essere delimitati da caratteri di tabulazioni. La tabella seguente suggerisce alcuni elementi per l'argomento di sistema.
| Elemento | Descrizione |
|---|---|
| Formati | Elenco delimitato da tabulazioni dei formati di clipboard che l'applicazione può elaborare. In genere, CF_ formati sono elencati con la parte "CF_" dei nomi rimossi (ad esempio , CF_TEXT è elencato come "TEXT"). |
| Aiuto | Testo che spiega brevemente come usare il server DDE. |
| MessaggioDiRisposta | Dettagli di supporto per il messaggio WM_DDE_ACK usato più di recente. Questo elemento è utile quando sono necessari più di otto bit di dati restituiti specifici dell'applicazione. |
| stato | Indicazione dello stato corrente dell'applicazione. Quando un server riceve un messaggio di WM_DDE_REQUEST per questo elemento dell'argomento di sistema, deve rispondere pubblicando un messaggio di WM_DDE_DATA con una stringa contenente Occupato o Pronto, in base alle esigenze. |
| SysItems | Elenco di elementi dell'argomento di sistema supportati dall'applicazione. |
| ElencoDiElementiArgomento | Analogamente all'elemento SysItems, ad eccezione del fatto che TopicItemList deve essere supportato per ogni argomento diverso dall'argomento di sistema. In questo modo è possibile esplorare gli elementi supportati in qualsiasi argomento. Se gli elementi non possono essere enumerati, questo elemento deve contenere solo "TopicItemList". |
| Argomenti | Elenco di argomenti supportati dall'applicazione al momento corrente; questo elenco può variare da un momento all'altro. |
Collegamenti dati permanenti
Una volta avviata una conversazione DDE, il client può stabilire uno o più collegamenti dati permanenti con il server. Un collegamento dati è un meccanismo di comunicazione tramite il quale il server invia una notifica al client ogni volta che cambia il valore di un elemento di dati specificato. Il collegamento dati è permanente nel senso che questo processo di notifica continua fino a quando il collegamento dati o la conversazione DDE stessa non viene terminata.
Esistono due tipi di collegamenti dati DDE permanenti: caldi e caldissimi. In un collegamento dati ad accesso frequente il server notifica al client che il valore dell'elemento dati è stato modificato, ma il server non invia il valore dei dati al client finché il client non lo richiede. In un collegamento a dati ad accesso frequente il server invia immediatamente il valore dei dati modificati al client.
Le applicazioni che supportano collegamenti dati ad accesso frequente o ad elevato accesso in genere forniscono un comando Copia o Incolla collegamento nel menu Modifica per consentire all'utente di stabilire collegamenti tra le applicazioni.
Atom e oggetti di memoria condivisa
Alcuni argomenti dei messaggi DDE sono atomi globali o oggetti di memoria condivisa. Le applicazioni che usano questi argomenti devono seguire regole esplicite su quando allocarle ed eliminarle. In tutti i casi, il mittente del messaggio deve eliminare qualsiasi oggetto atom o memoria condivisa che il ricevitore previsto non riceverà a causa di una condizione di errore, ad esempio un errore della funzione PostMessage .
DDE usa oggetti memoria condivisa per tre scopi:
- Per trasportare un valore di un elemento dati da scambiare. Si tratta di un elemento a cui fa riferimento il parametro hData nei messaggi WM_DDE_DATA e WM_DDE_POKE .
- Per portare le opzioni in un messaggio. Si tratta di un elemento a cui fa riferimento il parametro hOptions in un messaggio di WM_DDE_ADVISE .
- Per trasportare una stringa di esecuzione del comando. Si tratta di un elemento a cui fa riferimento il parametro hCommands nel messaggio WM_DDE_EXECUTE e il messaggio WM_DDE_ACK corrispondente.
Un'applicazione che riceve l'oggetto memoria condivisa DDE deve considerarlo di sola lettura. L'applicazione non deve utilizzare l'oggetto come area di lettura/scrittura reciproca per lo scambio gratuito di dati.
Come avviene con un atomo DDE, un'applicazione deve liberare un oggetto di memoria condivisa per gestire in modo efficace la memoria. L'applicazione deve anche bloccare e sbloccare oggetti memoria.
Panoramica dei messaggi di Dynamic Data Exchange
Poiché DDE è un protocollo basato su messaggi, non usa funzioni o librerie. Tutte le transazioni DDE vengono eseguite passando determinati messaggi DDE definiti tra le finestre client e server.
Ci sono nove messaggi DDE; Le costanti simboliche per questi messaggi vengono definite nel file di intestazione DDE. Alcune strutture per i vari messaggi DDE sono definite anche in questo file di intestazione.
La tabella seguente riepiloga i messaggi DDE:
| Messaggio | Descrizione |
|---|---|
| WM_DDE_ACK | Conferma la ricezione o la mancata ricezione di un messaggio. |
| WM_DDE_ADVISE | Richiede all'applicazione server di fornire un aggiornamento o una notifica per un elemento di dati ogni volta che viene modificato. In questo modo viene stabilito un collegamento dati permanente. |
| WM_DDE_DATA | Invia un valore dell'elemento dati all'applicazione client. |
| WM_DDE_EXECUTE | Invia una stringa all'applicazione server, che dovrebbe elaborare la stringa come una serie di comandi. |
| WM_DDE_INITIATE | Avvia una conversazione tra le applicazioni client e server. |
| WM_DDE_POKE | Invia un valore dell'elemento dati all'applicazione server. |
| WM_DDE_REQUEST | Richiede all'applicazione server di specificare il valore di un elemento di dati. |
| WM_DDE_TERMINATE | Termina una conversazione. |
| WM_DDE_UNADVISE | Termina un collegamento dati permanente. |
Un'applicazione chiama SendMessage per emettere il messaggio di WM_DDE_INITIATE o un messaggio di WM_DDE_ACK inviato in risposta a WM_DDE_INITIATE. Tutti gli altri messaggi vengono inviati da PostMessage. Il primo parametro di queste chiamate è un handle per la finestra di ricezione; il secondo parametro contiene il messaggio da inviare; il terzo parametro identifica la finestra di invio; e il quarto parametro contiene gli argomenti specifici del messaggio.
Flusso di messaggi di Dynamic Data Exchange
Una tipica conversazione DDE è costituita dagli eventi seguenti:
- L'applicazione client avvia la conversazione e l'applicazione server risponde.
- Le applicazioni scambiano dati con uno o tutti i metodi seguenti:
- L'applicazione server invia i dati al client alla richiesta del client.
- L'applicazione client invia dati non richiesti all'applicazione server.
- L'applicazione client richiede all'applicazione server di notificare al client ogni volta che un elemento di dati viene modificato (collegamento dati ad accesso frequente).
- L'applicazione client richiede all'applicazione server di inviare dati ogni volta che i dati vengono modificati (collegamento a dati ad accesso frequente).
- L'applicazione server esegue un comando alla richiesta del client.
- L'applicazione client o server termina la conversazione.
Una finestra dell'applicazione che elabora le richieste da un client o da un server deve elaborarle rigorosamente nell'ordine in cui vengono ricevute.
Un client può stabilire conversazioni con più server; un server può avere conversazioni con più client. Quando si gestiscono i messaggi provenienti da più di un'origine, un client o un server deve elaborare i messaggi di una conversazione in modo sincrono, ma non è necessario elaborare tutti i messaggi in modo sincrono. In altre parole, può passare da una conversazione a un'altra in base alle esigenze.
Se un'applicazione non è in grado di elaborare una richiesta in ingresso perché è in attesa di una risposta DDE, deve impedire il deadlock pubblicando un messaggio WM_DDE_ACK con il membro fBusy della struttura DDEACK impostato su 1. Un'applicazione può anche inviare un messaggio di WM_DDE_ACK occupato se, per qualsiasi motivo, non può elaborare una richiesta in ingresso entro un tempo ragionevole.
Un'applicazione deve essere in grado di gestire l'errore di un client o di un server per rispondere a un messaggio entro un determinato periodo di tempo. Poiché l'intervallo di timeout può variare a seconda della natura dell'applicazione e della configurazione del sistema dell'utente (incluso se è connesso a una rete), l'applicazione deve fornire un modo per consentire all'utente di specificare l'intervallo.
Funzioni di compressione dei parametri
Il parametro lParam di molti messaggi DDE contiene due parti di dati. Ad esempio, lParam del messaggio WM_DDE_DATA contiene un handle dati e un atom. Le applicazioni devono usare la funzione PackDDElParam per comprimere l'handle e l'atom in un parametro lParam e la funzione UnpackDDElParam per rimuovere i valori. Le applicazioni DDE devono usare PackDDElParam e UnpackDDElParam per tutti i messaggi inviati durante una conversazione DDE.
Le applicazioni possono anche usare le funzioni ReuseDDElParam e FreeDDElParam . ReuseDDElParam consente a un'applicazione DDE di riutilizzare un parametro lParam compresso, riducendo il numero di riallocazioni di memoria che l'applicazione deve eseguire durante una conversazione. Un'applicazione può usare FreeDDElParam per liberare la memoria associata a un handle di dati ricevuto durante una conversazione DDE.
Scambio di dati dinamici e impersonificazione
Per consentire a un server di rappresentare un client, il client chiama la funzione DdeSetQualityOfService . La struttura SECURITY_IMPERSONATION_LEVEL viene utilizzata per controllare il livello di impersonazione che il server può eseguire.
Un server DDE può rappresentare un client DDE chiamando la funzione ImpersonateDdeClientWindow . Un server DDEML deve usare la funzione DdeImpersonateClient .