Condividi tramite


Chiamata di funzioni DLL da applicazioni Visual Basic

Per le applicazioni Visual Basic (o applicazioni in altri linguaggi, ad esempio Pascal o Fortran) per chiamare le funzioni in una DLL C/C++, le funzioni devono essere esportate usando la convenzione di chiamata corretta senza alcuna decorazione del nome eseguita dal compilatore

__stdcall crea la convenzione di chiamata corretta per la funzione (la funzione chiamata pulisce lo stack e i parametri vengono passati da destra a sinistra) ma decora il nome della funzione in modo diverso. Pertanto, quando __declspec(dllexport) viene usato in una funzione esportata in una DLL, il nome decorato viene esportato.

La __stdcall decorazione del nome antepone il nome del simbolo con un carattere di sottolineatura ( _ ) e aggiunge il simbolo con un carattere di segno (@) seguito dal numero di byte nell'elenco di argomenti (lo spazio dello stack richiesto). Di conseguenza, la funzione quando dichiarata come:

int __stdcall func (int a, double b)

è decorata come _func@12 nell'output.

La convenzione di chiamata C (__cdecl) decora il nome come _func.

Per ottenere il nome decorato, usare /MAP. L'uso di __declspec(dllexport) esegue le operazioni seguenti:

  • Se la funzione viene esportata con la convenzione di chiamata C (__cdecl), rimuove il carattere di sottolineatura iniziale ( _ ) quando il nome viene esportato.

  • Se la funzione esportata non usa la convenzione di chiamata C ,ad esempio __stdcall, esporta il nome decorato.

Poiché non è possibile eseguire l'override della posizione in cui si verifica la pulizia dello stack, è necessario usare __stdcall. Per annullare la dedecoerazione dei nomi con __stdcall, è necessario specificarli usando gli alias nella sezione EXPORT del file con estensione def. Come illustrato di seguito per la dichiarazione di funzione seguente:

int  __stdcall MyFunc (int a, double b);
void __stdcall InitCode (void);

Nel. File DEF:

EXPORTS
   MYFUNC=_MyFunc@12
   INITCODE=_InitCode@0

Affinché le DLL vengano chiamate da programmi scritti in Visual Basic, la tecnica alias illustrata in questo argomento è necessaria nel file con estensione def. Se l'alias viene eseguito nel programma Visual Basic, l'uso dell'aliasing nel file con estensione def non è necessario. Può essere eseguita nel programma Visual Basic aggiungendo una clausola alias all'istruzione Declare .

Scegliere l'argomento su cui visualizzare maggiori informazioni

Vedi anche

Creare DLL C/C++ in Visual Studio