Condividi tramite


Utilizzo di funzioni DLL non gestite

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

  1. Identificare le funzioni nelle DLL.

    Minimamente, è necessario specificare il nome della funzione e il nome della DLL che la contiene.

  2. 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.

  3. Creare prototipi nel codice gestito.

    [Visual Basic] Usa l'istruzione Declare con la parola chiave Function e Lib. In alcuni rari casi, è possibile usare DllImportAttribute con le parole chiave Funzione condivisa . Questi casi vengono illustrati più avanti in questa sezione.

    [C#] Usa il DllImportAttribute per identificare la DLL e la funzione. Contrassegna il metodo con i modificatori static e extern.

    [C++] Usare DllImportAttribute per identificare la DLL e la funzione. Contrassegnare il metodo o la funzione wrapper con extern "C".

  4. Chiamare una funzione DLL.

    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.

Diagramma che mostra una chiamata di invocazione della piattaforma.

Quando platform invoke chiama una funzione non gestita, esegue la sequenza di azioni seguente:

  1. Individua la DLL contenente la funzione.

  2. Carica la DLL in memoria.

  3. 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.

  4. Trasferisce il controllo alla funzione non gestita.

Platform invoke lancia eccezioni generate dalla funzione non gestita al chiamante gestito.

Vedere anche