Udostępnij za pośrednictwem


Eksportowanie z biblioteki DLL przy użyciu plików DEF

Plik definicji modułów (DEF) jest plikiem tekstowym zawierającym instrukcje modułu, które opisują różne atrybuty biblioteki DLL.Jeśli nie używasz opcję __declspec(dllexport) słowo kluczowe, aby wyeksportować funkcji biblioteki DLL, biblioteka DLL wymaga pliku .def.

Pliku minimal .def musi zawierać następujące instrukcje definicji modułów:

  • Pierwsza instrukcja w pliku musi być instrukcja biblioteki.Ta instrukcja identyfikuje pliku .def jako należący do biblioteki DLL.Instrukcja biblioteki następuje nazwa biblioteki DLL.Program łączący umieszcza tę nazwę biblioteki import biblioteki DLL.

  • Instrukcję EXPORTS Wyświetla listę nazw i, opcjonalnie, wartości porządkowej funkcji eksportowanych przez DLL.Przypisywanie wartości porządkowej funkcji przez po nazwie funkcji z na znak (@) i numer.Podczas określania wartości porządkowej musi być z zakresu od 1 do N, gdzie n jest liczbą funkcji eksportowanych przez DLL.Jeśli chcesz wyeksportować funkcji przez wartość porządkową, zobacz Eksportowanie funkcji z biblioteki DLL porządkowej raczej niż nazwa jak również w tym temacie.

Na przykład biblioteki DLL, która zawiera kod w celu zaimplementowania drzewa binarnego wyszukiwania może wyglądać następująco:

LIBRARY   BTREE
EXPORTS
   Insert   @1
   Delete   @2
   Member   @3
   Min   @4

Jeśli używasz MFC DLL Kreatora do tworzenia biblioteki MFC DLL, Kreator utworzy plik .def szkielet i automatycznie dodaje do projektu.Dodaj nazwy funkcji, które mają być eksportowane do tego pliku.Dla nie - MFC DLL, należy samodzielnie utworzyć pliku .def i dodać go do swojego projektu.

Jeśli eksportujesz funkcji w pliku C++, należy umieścić nazwy dekoracyjne w pliku .def lub definiują funkcje wywożonych z standardowe powiązania c za pomocą extern "C".Jeśli trzeba umieścić nazwy dekoracyjne w pliku .def, można je uzyskać za pomocą DUMPBIN narzędzia lub przy użyciu łączący /map opcji.Należy zauważyć, że nazwy dekoracyjne, wyprodukowanych przez kompilator kompilator szczególnych.Jeżeli nazwy dekoracyjne, wytwarzane przez kompilator Visual C++ pliku .def, aplikacje, które łącze do biblioteki DLL muszą wbudowane przy użyciu tej samej wersji programu Visual C++, tak aby nazwy dekoracyjne w aplikacji wywołującej pasują do eksportowanych nazw w pliku .def biblioteki DLL.

Jeśli tworzysz biblioteki DLL rozszerzenia, i eksportowania przy użyciu pliku .def, umieść następujący kod na początku i końcu zawierających klasy eksportowanych plików nagłówka:

#undef AFX_DATA
#define AFX_DATA AFX_EXT_DATA
// <body of your header file>
#undef AFX_DATA
#define AFX_DATA

Te wiersze zapewnienia, że MFC zmiennych, które są używane wewnętrznie lub które są dodawane do klasy użytkownika są eksportowane (ani zaimportowane) z biblioteki DLL rozszerzenia sieci.Na przykład wynikające z za pomocą klasy DECLARE_DYNAMIC, makro jest rozszerzany, aby dodać CRuntimeClass zmienną dla swojej klasy.Pomijając te cztery linie może spowodować biblioteki DLL do kompilacji lub łączenie niepoprawnie lub powodują wystąpienie błędu, gdy aplikacja kliencka łączy się z biblioteki DLL.

Konstruując biblioteki DLL program łączący używa pliku .def, aby utworzyć plik eksportu (.exp) i pliku importu biblioteki (lib).Program łączący następnie używa pliku eksportu do tworzenia pliku DLL.Pliki wykonywalne niejawnie łącze do łącza Importuj biblioteki DLL, gdy są one zbudowane.

Należy zauważyć, że MFC sam używa plików .def eksportu funkcji i klasy MFCx0.dll.

Co chcesz zrobić?

Co chcesz wiedzieć więcej?

Zobacz też

Koncepcje

Eksportowanie z biblioteki DLL