====== 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]]