EKSPORTY
Wprowadzono sekcję definicji eksportu, które należy określić wyeksportowane nazwy lub liczb porządkowych funkcji lub danych.Każda definicja musi być w osobnym wierszu.
EXPORTS
definition
Uwagi
Pierwszy definition może być w jednym wierszu jako EXPORTS słowo kluczowe lub kolejnego wiersza.. Plik DEF może zawierać co najmniej jedną EXPORTS instrukcji.
Składnia eksportu definition jest:
entryname[=internalname] [@ordinal [NONAME]] [[PRIVATE] | [DATA]]
entryname jest to nazwa funkcji lub zmienna do wyeksportowania.Jest to konieczne.Jeśli nazwa, pod jaką eksportowania różni się od nazwy w pliku DLL, określ nazwę danych eksportu w pliku DLL przy użyciu internalname.Na przykład, jeśli funkcja eksportu biblioteki DLL func1 i ma obiekty wywołujące do go używać jako func2, należy określić:
EXPORTS
func2=func1
Ponieważ kompilator Visual C++ używa nazwy dekoracji dla funkcji C++, należy użyć jako nazwa entryname lub internalname, lub zdefiniować przy użyciu funkcji wyeksportowane extern "C" w kodzie źródłowym.Kompilator również decorates C funkcje, które używają __stdcall Konwencji z podkreślenia (_) prefiks i sufiks składające się z wywoływania znakiem (@) następuje liczba bajtów (liczba dziesiętna) na liście argumentów.
Aby znaleźć dekoracyjną nazwy utworzonej przez kompilator, należy użyć DUMPBIN narzędzia lub program łączący /mapowania opcji.Nazwy dekoracyjną są specyficzne dla kompilatora.Jeśli eksportujesz kolekcję nazwy dekoracyjną w. Plik DEF plików wykonywalnych, które łącze do biblioteki DLL musi zostać utworzony również przy użyciu tej samej wersji kompilatora.Zapewnia to, że nazwy dekoracyjną w obiekt wywołujący zgodne z nazwami wyeksportowane, w. Plik rozdzielczości.
Można użyćordinal można określić liczbę, a nie nazwy funkcji, przejdzie do tabeli eksportu biblioteki DLL.Wiele bibliotek DLL systemu Windows Eksportuj liczb porządkowych do obsługi starszy kod.Było wspólne używać liczb porządkowych w 16-bitowe kodu systemu Windows, ponieważ go można zmniejszyć rozmiar pliku DLL.Nie zaleca się eksportowanie funkcji przez numeru porządkowego, chyba że klienci biblioteki DLL potrzebny do obsługi starszych wersji.Ponieważ. Biblioteka plik zawiera mapowanie między porządkową i funkcji, można użyć nazwy funkcji, jak zwykle w projektach, które używają biblioteki DLL.
Przy użyciu opcjonalnego NONAME słowo kluczowe, można wyeksportować tylko porządkową i zmniejszyć rozmiar tabeli eksportu w wynikowe DLL.Jednakże jeśli chcesz użyć GetProcAddress w pliku DLL, musi znać numeru porządkowego, ponieważ nazwa nie jest prawidłowy.
Opcjonalne słowo kluczowe PRIVATE zapobiega entryname zostaną uwzględnione w bibliotece importu wygenerowanych przez łącza.Nie ma ona wpływu na eksport obrazu również generowanych przez łącza.
Opcjonalne słowo kluczowe DATA Określa, że eksportowania danych, nie kod.W tym przykładzie pokazano, jak można wyeksportować dane zmienną o nazwie exported_global:
EXPORTS
exported_global DATA
Istnieją cztery sposoby eksportowania definicję w kolejności zalecane:
__Declspec(dllexport) słowo kluczowe w kodzie źródłowym
EXPORTS Instrukcji w. Plik DEF
/EKSPORTUJ specyfikacji w poleceniu łącza
Element komentarz dyrektywy w kodzie źródłowym w postaci #pragma comment(linker, "/export:definition")
Wszystkie cztery metody może służyć do programu.Gdy łącze tworzy program, który zawiera eksportowanie, tworzy również Importuj biblioteki, chyba że. Oczekiwane plik jest używany podczas kompilacji.
Oto przykład sekcji EKSPORTOWANIE:
EXPORTS
DllCanUnloadNow @1 PRIVATE
DllWindowName = WindowName DATA
DllGetClassObject @4 NONAME PRIVATE
DllRegisterServer @7
DllUnregisterServer
Podczas eksportowania zmienną z biblioteki DLL przy użyciu. Plik DEF, nie trzeba określać __declspec(dllexport) od zmiennej.Jednak w dowolnym pliku, który używa biblioteki DLL, muszą nadal używać __declspec(dllimport) w deklaracji danych.