Udostępnij za pośrednictwem


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?

Zobacz też

Koncepcje

Biblioteki DLL w programie Visual C++