Dodaj do ulubionych

Współdzielenie biblioteki

18.06.06, 21:18
Witam Serdecznie

Chciałem zapytać się Was, czy wiecie jak zaprogramować bibliotekę, która
współdzielona jest przez więcej niż jedną aplikację. Chodzi mi aby tylko jedna
kopia takiej biblioteki była w pamięci operacyjnej.

W zasadzie, tak dokładnie rzecz ujmując, potrzebuje napisać bibliotekę, która
będzie silnikiem malowania kontrolek. W każdej chwili może nastąpić zmiana
silnika, na inny. Tak więc wydzieliłem kontrolki do biblioteki dynamicznej
podpiananej w run-timie, ale z niej muszę wywoływać funkcje samego malowania.
Te właśnie funkcje mają być w tej jednej bibliotece.

Ma ktoś pomysł?
Obserwuj wątek
        • alsor Re: Współdzielenie biblioteki 22.06.06, 00:02
          Popatsz sobie jak są zrobione standardowe okienka: edit, static, listbox...
          siedzi to wszystko w jednym dll - user.
          albo tzw. common controls: listview, tolltip, treeview... wszystko jest w commctl32

          Aplikacja dostaje komunikat rysowania i rysuje - to wszystko odbywa się w jednym
          wątku, w tym który utworzył okno.

          Ten jeden centralny proces już jest - proces systemu operacyjnego.
          Jest on jednak lepiej skonstruowany, bo nie robi niepotrzebnie osobnych wątków
          dla każdego wątku z oknami.
        • negevmc Re: Współdzielenie biblioteki 25.06.06, 16:34
          Chyba rozumiem o co Ci chodzi choć bardzo zawile to tłumaczysz.
          Na pierwszy rzut oka zrozumiałem Twój problem tak jak alsor i tak jak on
          proponowałbym zwykły DLL.
          Rozumiem jednak, że Ty potrzebujesz mechanizm, który kontrolowałby
          wszystkie działające w danym momencie aplikacje.
          Innymi słowy gdy w jednej chwili zmieniasz parametry silnika - kontrolki
          wszystkich aplikacji to zauważają i zachowują sie inaczej.
          Jeśli tak, to jest to sytuacja dokładnie odwrotna i potrzbujesz klasycznej
          aplikacji client-server.
          Jeśli wszystkie aplikacje klienci mają działać na tej samej samej maszynie
          bez wysiłku możesz posłużyć się funkcja SendMessage aby powiadomić ich o
          zmianie silnika.
          Jeśli na różnych ale dzielących wspólne zasoby dyskowe możesz pokusić się
          o wspólny zbiór z aktualnymi parametrami a klienci muszą czytac go co jakiś
          czas i weryfikować swoje zachowanie. Szybkość "reakcji" na taką zmiane
          zależy jak często będziesz sprawdzal parametry.
          Wreszcie trzecia metoda - najefektywniejsza ale najbardziej pracochłonna
          to stworzenie 2 aplikacji: serwera i klienta. Klient zapala Twoje kontrolki ale
          tylko w sposób w jaki pozwala (czy każe) mu serwer. Wysyła do niego "zapytanie"
          a otrzymuje "odpowiedź" i .. robi z nią co należy.
          Pisanie aplikacji client-serwer nie jest proste ale np. Delphi czy C++ Builder
          dysponują narzędziami upraszczającymi cały proces oraz dostarczają "wbudowane"
          sposoby komunikacji między aplikacjami.



          --
          rzuć okiem

Popularne wątki

Nie pamiętasz hasła

lub ?

 

Nie masz jeszcze konta? Zarejestruj się

Nakarm Pajacyka