Wywoływanie funkcji DLL z aplikacji Visual Basic
Dla aplikacji Visual Basic (lub aplikacji w innych językach, takich jak Pascal lub Fortran) do wywołania funkcji w bibliotece DLL C i C++ funkcje muszą zostać wywiezione przy użyciu prawidłowego konwencja wywołania bez żadnych dekorowania nazw przez kompilator.
__stdcalltworzy prawidłowe konwencja wywołania funkcji (wywoływana funkcja czyści stosu i parametry są przekazywane od prawej do lewej), ale decorates nazwę funkcji w różny sposób.Kiedy więc, opcję __declspec(dllexport) jest używana w wyeksportowanej funkcji w bibliotece DLL, nazwa jest eksportowany.
__stdcall Przekręcenie nazwy dodanie prefiksu składającego nazwę symbolu znaku podkreślenia (_) i dołącza symbol z znak (@) znaku następuje liczba bajtów na liście argumentów (wymagany obszar stosu).W efekcie funkcja podczas zadeklarowany jako:
int __stdcall func (int a, double b)
jest urządzony jako:
_func@12
C konwencja wywołania (__cdecl) decorates nazwę jako _func.
Aby uzyskać nazwę, należy /map.Wykorzystanie opcję __declspec(dllexport) wykonuje następujące czynności:
Jeśli funkcja jest eksportowany z c konwencja wywołania (_cdecl), paski podkreślenia (_), po wyeksportowaniu nazwę.
Jeśli funkcja wywozu nie korzysta z c konwencja wywołania (na przykład __stdcall), wywóz jej nazwę.
Ponieważ sposobem zastępują, w którym występuje Oczyszczanie stosu, należy użyć __stdcall.Do nazwy z undecorate __stdcall, należy je określić za pomocą aliasów w sekcji pliku .def wywozu.Jest to widoczne w następujący sposób dla następującej deklaracji funkcji:
int __stdcall MyFunc (int a, double b);
void __stdcall InitCode (void);
W.Plik DEF:
EXPORTS
MYFUNC=_MyFunc@12
INITCODE=_InitCode@0
Dla bibliotek DLL do wywołania przez programy napisane w języku Visual Basic technika alias przedstawione w tym temacie jest konieczna w pliku .def.Alias jest wykonywane w programie Visual Basic, użyj wygładzanie w pliku .def nie jest konieczne.Może to być wykonywane w programie Visual Basic przez dodanie klauzuli aliasu do Declare instrukcji.
Co chcesz wiedzieć więcej?
Eksportowanie z biblioteki DLL przy użyciu opcję __declspec(dllexport)
Eksportowanie funkcje C++ do użycia w plików wykonywalnych języka c