Importowanie do aplikacji przy użyciu atrybutu __declspec(dllimport)
Program, który używa publicznych symboli zdefiniowanych przez bibliotekę DLL, mówi się, że je importuje. Podczas tworzenia plików nagłówkowych dla aplikacji, które używają bibliotek DLL do kompilowania, użyj ich __declspec(dllimport)
w deklaracjach symboli publicznych. Słowo kluczowe __declspec(dllimport)
działa niezależnie od tego, czy eksportujesz z plikami def, czy ze __declspec(dllexport)
słowem kluczowym.
Aby kod był bardziej czytelny, zdefiniuj makro, __declspec(dllimport)
a następnie za pomocą makra zadeklaruj każdy zaimportowany symbol:
#define DllImport __declspec( dllimport )
DllImport int j;
DllImport void func();
Użycie __declspec(dllimport)
jest opcjonalne w deklaracjach funkcji, ale kompilator tworzy bardziej wydajny kod, jeśli używasz tego słowa kluczowego. Jednak do importowania pliku wykonywalnego należy użyć __declspec(dllimport)
, aby uzyskać dostęp do publicznych symboli i obiektów danych biblioteki DLL. Należy pamiętać, że użytkownicy biblioteki DLL nadal muszą łączyć się z biblioteką importu.
Możesz użyć tego samego pliku nagłówka zarówno dla biblioteki DLL, jak i aplikacji klienckiej. W tym celu należy użyć specjalnego symbolu preprocesora, który wskazuje, czy tworzysz bibliotekę DLL, czy kompilujesz aplikację kliencką. Na przykład:
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
class CLASS_DECLSPEC CExampleA : public CObject
{ ... class definition ... };