Mam działający projekt w VS2015 (C++) który składa się z nagłówków, plików źródłówych, oraz sam korzysta z jednej third-party dll.
Teraz chce to wszystko spiąć w jedną biblioteke dynamiczną, aby móc korzystać z klas i ich metod w swoim projekcie. Jak tego dokonać?
W ustawieniach projektu ustawiasz “Configuration type” na “Dynamic library (.dll)”
Rzeczy do eksportu oznaczasz przez __declspec(dllexport) a importowane __declspec(dllimport)
Najlepiej zrobić sobie odpowiednie makro na początku pliku nagłówkowego swojej biblioteki, np. #ifdef MOJA_LIBKA__MAKE_DLL #define MOJA_LIBKA__API __declspec(dllexport) #else #define MOJA_LIBKA__API __declspec(dllimport) #endif
MOJA_LIBKA__API extern int jakas_zmienna_globalna;
MOJA_LIBKA__API int jaka_funkcja(float x);
MOJA_LIBKA__API class Jakas_klasa { //jeśli zastosujesz do całej klasy to wyeksportujesz wszystkie jej metody
};
class Jakas_inna_klasa {
public:
MOJA_LIBKA__API int eksportowana_metoda(); //możesz też wybrać poszczególne metody do eksportu.
int nie_eksportowana_metoda();
};
I w projekcie biblioteki definiujesz MOJA_LIBKA__MAKE_DLL (albo dajesz #define przed #include, albo możesz zdefiniować globalnie w ustawieniach projektu).
A w projekcie korzystającym z biblioteki linkujesz plik .lib generowany razem z .dll (w ustawieniach projektu, w opcjach linkera -> input -> additional dependencies dopisujesz ścieżkę do .lib).