Udostępnij za pośrednictwem


Określenia eksportujących metody stosowania

Można wyeksportować funkcji na dwa sposoby — pliku .def lub __declspec(dllexport) słowa kluczowego.Aby pomóc w podjęciu decyzji, w jaki sposób jest lepszy do biblioteki DLL, należy rozważyć następujące pytania:

  • Czy zamierzasz eksportować więcej funkcji później?

  • Jest biblioteki DLL używane tylko przez aplikacje, które można ponownie utworzyć lub jest używany przez aplikacje, które nie można odbudować — na przykład aplikacje, które są tworzone przez osoby trzecie?

Plusy i minusy przy użyciu plików .def

Eksportowanie funkcji w daje pliku .def, którymi można sterować liczb porządkowych eksportu.Po dodaniu wyeksportowanej funkcji do biblioteki DLL, można przypisać wartość porządkową większą niż wyeksportowanej funkcji.Po wykonaniu tej aplikacji, które używają niejawnym dołączaniu nie trzeba ponownie połączyć z biblioteką importu, który zawiera nową funkcję.Jest to bardzo wygodne, ponieważ można dodać nowe funkcje, a także zapewnić, że nadal działa poprawnie z aplikacji, które już powoływać się na to, w przypadku projektowania bibliotekę DLL do użycia przez wiele aplikacji.Na przykład biblioteki MFC DLL są zbudowane przy użyciu plików .def.

Inną korzyścią wynikającą z używania pliku .def jest, że można używać NONAME atrybutu, aby wyeksportować funkcję.Spowoduje to umieszczenie tylko liczba porządkowa w tabeli wywozu w bibliotece DLL.DLL, które mają dużą liczbę eksportowanych funkcji za pomocą NONAME atrybut można zmniejszyć rozmiar pliku DLL.Aby uzyskać informacje na temat pisania instrukcja definicji modułu, zobacz Instrukcje definicji modułu zasad.Informacje eksportu porządkowych, zobacz Eksportowanie funkcji z biblioteki DLL przez wartość porządkową zamiast nazwy.

Niedogodność używania pliku .def będzie Jeśli eksportujesz funkcji w pliku C++, albo trzeba umieścić nazwy urządzone w .def pliku lub zdefiniować eksportowanych funkcji przy użyciu extern "C", aby uniknąć dekorowania nazwy, jaka została wykonana przez kompilator Visual C++.

Jeśli umieścisz dekoracyjną nazw w pliku .def, można je uzyskać za pomocą DUMPBIN narzędzia lub przy użyciu programu łączącego /map opcji.Dekoracyjną nazwy, które są produkowane przez kompilator są specyficznych dla kompilatora; w związku z tym Jeśli umieścisz dekoracyjną nazw, które są produkowane przez kompilator do pliku .def, aplikacje, które dołączyć bibliotekę DLL muszą być także budowane przy użyciu tej samej wersji kompilatora, tak aby nazwy urządzone w aplikacji wywołującej dopasowanie eksportowanych nazw w pliku .def biblioteki DLL.

Plusy i minusy przy użyciu __declspec(dllexport)

Za pomocą __declspec(dllexport) jest wygodne, ponieważ nie trzeba się martwić o utrzymywanie pliku .def i uzyskania dekoracyjną nazwy eksportowanych funkcji.Jednakże przydatność tego sposobu eksportowania jest ograniczona przez liczbę połączonych aplikacji, które chcesz odbudować.Po odbudowaniu DLL z nowego wywozu należy odbudować aplikacje, ponieważ dekoracyjną nazwy eksportowanych funkcji C++ mogą ulec zmianie, jeśli używasz innej wersji kompilatora go odbudować.

900axts6.collapse_all(pl-pl,VS.110).gifCo chcesz zrobić?

900axts6.collapse_all(pl-pl,VS.110).gifCo chcesz dowiedzieć się więcej?

Zobacz też

Koncepcje

Eksportowanie z biblioteki DLL