Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
För Visual Basic-program (eller program på andra språk som Pascal eller Fortran) för att anropa funktioner i en C/C++ DLL måste funktionerna exporteras med rätt anropskonvention utan någon namndekoration som gjorts av kompilatorn
              __stdcall skapar rätt anropskonvention för funktionen (den anropade funktionen rensar stacken och parametrar skickas från höger till vänster) men dekorerar funktionsnamnet på ett annat sätt. Så, när __declspec(dllexport) används på en exporterad funktion i en DLL, exporteras det dekorerade namnet.
Namndekorationen __stdcall prefixar symbolnamnet med ett understreck ( _ ) och lägger till symbolen med ett tecken (@) följt av antalet byte i argumentlistan (det nödvändiga stackutrymmet). Det innebär att funktionen när den deklareras som:
int __stdcall func (int a, double b)
är dekorerad som _func@12 i resultatet.
C-anropskonventionen (__cdecl) dekorerar namnet som _func.
Använd /MAP för att hämta det dekorerade namnet. Användning av __declspec(dllexport) gör följande:
- Om funktionen exporteras med C-anropskonventionen ( - __cdecl) tas det inledande understrecket ( _ ) bort när namnet exporteras.
- Om funktionen som exporteras inte använder C-anropskonventionen (till exempel - __stdcall), exporteras det dekorerade namnet.
Eftersom det inte finns något sätt att åsidosätta var stackrensningen sker måste du använda __stdcall. Om du vill avdekoda namn med __stdcallmåste du ange dem med hjälp av alias i avsnittet EXPORTer i .def-filen. Detta visas på följande sätt för följande funktionsdeklaration:
int  __stdcall MyFunc (int a, double b);
void __stdcall InitCode (void);
I .DEF-filen:
EXPORTS
   MYFUNC=_MyFunc@12
   INITCODE=_InitCode@0
För att DLL:er ska anropas av program som skrivits i Visual Basic krävs aliastekniken som visas i det här avsnittet i .def-filen. Om aliaset görs i Visual Basic-programmet är det inte nödvändigt att använda alias i .def-filen. Det kan göras i Visual Basic-programmet genom att lägga till en alias-sats i deklarera-instruktionen .