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.
Platform invoke è un servizio che consente al codice gestito di chiamare funzioni non gestite implementate nelle librerie di collegamento dinamico (DLL), ad esempio quelle nell'API Windows. Identifica e richiama una funzione esportata e gestisce i suoi argomenti (numeri interi, stringhe, matrici, strutture e così via) oltre il confine di interoperabilità secondo necessità.
Questa sezione presenta le attività associate all'utilizzo di funzioni DLL non gestite e fornisce altre informazioni su Platform Invoke. Oltre alle attività seguenti, sono disponibili considerazioni generali e un collegamento che fornisce informazioni ed esempi aggiuntivi.
Per utilizzare le funzioni DLL esportate
Identificare le funzioni nelle DLL.
Minimamente, è necessario specificare il nome della funzione e il nome della DLL che la contiene.
Creare una classe per contenere funzioni DLL.
È possibile usare una classe esistente, creare una singola classe per ogni funzione non gestita o creare una classe contenente un set di funzioni non gestite correlate.
Creare prototipi nel codice gestito.
[Visual Basic] Usa l'istruzione
Declarecon la parola chiaveFunctioneLib. In alcuni rari casi, è possibile usareDllImportAttributecon le parole chiave Funzione condivisa . Questi casi vengono illustrati più avanti in questa sezione.[C#] Usa il
DllImportAttributeper identificare la DLL e la funzione. Contrassegna il metodo con i modificatoristaticeextern.[C++] Usare
DllImportAttributeper identificare la DLL e la funzione. Contrassegnare il metodo o la funzione wrapper con extern "C".-
Chiamare il metodo sulla classe gestita come qualsiasi altro metodo gestito. Il passaggio di strutture e l'implementazione di funzioni di callback sono casi speciali.
Per esempi che illustrano come costruire dichiarazioni basate su .NET da usare con Platform Invoke, vedere Marshalling dei dati con Platform Invoke.
Un'analisi più attenta di Platform Invoke
Platform invoke si basa sui metadati per individuare le funzioni esportate e effettuare il marshalling degli argomenti in fase di esecuzione. Questo processo viene illustrato nella figura seguente.
Quando platform invoke chiama una funzione non gestita, esegue la sequenza di azioni seguente:
Individua la DLL contenente la funzione.
Carica la DLL in memoria.
Individua l'indirizzo della funzione in memoria e ne inserisce gli argomenti nello stack, esegue il marshalling dei dati in base alle esigenze.
Annotazioni
L'individuazione e il caricamento della DLL e l'individuazione dell'indirizzo della funzione in memoria si verificano solo nella prima chiamata alla funzione.
Trasferisce il controllo alla funzione non gestita.
Platform invoke lancia eccezioni generate dalla funzione non gestita al chiamante gestito.