Volání funkcí knihovny DLL z aplikací jazyka Visual Basic
pro aplikace Visual Basic (nebo aplikací v jiných jazycích, jako je Pascal nebo Fortran) volání funkcí v knihovně DLL jazyka C/C++, je nutné tyto funkce exportovat pomocí správné konvence volání bez jakýchkoli názvů, které provádí kompilátor.
__stdcall Vytvoří správnou konvenci volání funkce (volaná funkce vyčistí zásobník a parametry jsou předány zprava doleva), ale upraví název funkce odlišně. Takže při __declspec(dllexport) použití v exportované funkci v knihovně DLL je upravený název exportován.
__stdcallDekorování názvů má předponu názvu symbolu podtržítkem ( __stdcall ) a připojí symbol pomocí znaku ' symbol ' ( @ ) následovaný počtem bajtů v seznamu argumentů (požadované místo v zásobníku). V důsledku toho je funkce deklarována jako:
int __stdcall func (int a, double b)
je upraven jako _func@12 ve výstupu.
Konvence volání jazyka C ( __cdecl ) upraví název jako _func .
Chcete-li získat dekorovaný název, použijte /map. Použijte __declspec(dllexport) následující:
Pokud je funkce exportována pomocí konvence volání jazyka C (
__cdecl), při exportu názvu odstraní počáteční podtržítko (__cdecl).Pokud funkce, která je exportována, nepoužívá konvenci volání jazyka C (například
__stdcall), exportuje upravený název.
Vzhledem k tomu, že neexistuje žádný způsob, jak přepsat, kde dojde k vyčištění zásobníku, je nutné použít __stdcall . Chcete-li Neupravovat názvy pomocí __stdcall , je nutné je zadat pomocí aliasů v části EXPORTS v souboru. def. To je znázorněno následovně pro následující deklaraci funkce:
int __stdcall MyFunc (int a, double b);
void __stdcall InitCode (void);
V. DEF soubor:
EXPORTS
MYFUNC=_MyFunc@12
INITCODE=_InitCode@0
aby byly knihovny dll volány programy napsanými v Visual Basic, je v souboru. def nutná metoda aliasů uvedená v tomto tématu. pokud se alias provádí v Visual Basic programu, není nutné použít aliasing v souboru. def. lze ji provést v programu Visual Basic přidáním klauzule alias do příkazu Declare .
K čemu chcete získat další informace?
Export z knihovny DLL pomocí deklarace __declspec(dllexport)
Export funkcí jazyka C++ pro použití ve spustitelných souborech jazyka C