====== Biblioteki DLL ======
===== Zadanie 1 =====
- Utwórz bibliotekę DLL:
* wyeksportuj z niej funkcję ''Komunikat'', która wyświetla okno MessageBox z zadanym w argumencie komunikatem,
* wyeksportuj klasę o nazwie ''MojaKlasa'' zawierającą metodę publiczną ''Komunikat'' działającą identycznie jak powyższa funkcja.
* korzystając z narzędzia [[https://msdn.microsoft.com/en-us/library/c1h23y6c.aspx|DumpBin.exe]] zobacz listę eksportowanych (oraz importowanych) funkcji z utworzonego pliku ''.dll'' oraz ''.lib''.
* do eksportowania wykorzystaj modyfikator: \\ extern "C" __declspec(export)
- Utwórz w ramch tego samego rozwiązania nowy projekt i zlinkuj bibliotekę statycznie (niejawnie). Przetestuj działanie dostępnych w bibliotece funkcji i klas. \\
* dodaj do biblioteki DLL funkcję [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583%28v=vs.85%29.aspx|DllMain]]. Wyświetl komunikaty (MessageBox) infromujące o tym jaki był powód uruchomienia tej funkcji (np. ''DLL_PROCESS_ATTACH'')
* do importowania funkcji i zmiennych z biblioteki wykorzystaj modyfikator: \\ extern "C" __declspec(import)
* korzystając z DumpBin.exe zobacz listę eksportowanych (oraz importowanych) funkcji z utworzonego pliku ''.exe''
* utwórz dodatkowy wątek tak aby wywołać w bibliotece dll funjcę DllMain z ''DLL_THREAD_ATTACH''
- Utwórz w ramch tego samego rozwiązania nowy projekt i zlinkuj bibliotekę dunamicznie (jawnie) w czasie działania programu. Przetestuj działanie dostępnych w bibliotece funkcji i klas.
* korzystając z DumpBin.exe zobacz listę eksportowanych (oraz importowanych) funkcji z utworzonego pliku ''.exe''
* wyświetl pełną ścieżkę i nazwę wczytanej biblioteki,
* przydatne funkcje:
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx|LoadLibrary]] wczytuje moduł do pamięci wirtualnej procesu
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms683212%28v=vs.85%29.aspx|GetProcAddress]] uzyskuje adres importowanej funkcji
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms683152%28v=vs.85%29.aspx|FreeLibrary]] zwalnia zasoby biblioteki DLL
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms683197%28v=vs.85%29.aspx|GetModuleFileName]]
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/hh310513%28v=vs.85%29.aspx|AddDllDirectory]]
- Umieść w bibliotece DLL następujące zasoby: dowolny napis, dowolne menu
* wczytaj z biblioteki zapisane zasoby. Wczytany tekst wyświetl a menu załaduj jako menu kontekstowe (aktywowane prawym klawiszem myszy w oknie)
* przydatne funkcje:
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms647486%28v=vs.85%29.aspx|LoadString]]
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms647990%28v=vs.85%29.aspx|LoadMenu]]
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms648002%28v=vs.85%29.aspx|TrackPopupMenu]]
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms647984%28v=vs.85%29.aspx|GetSubMenu]]
* [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms648390%28v=vs.85%29.aspx|GetCursorPos]]