Windows i funkcja LoadLibrary - POMOCY

0

Witam.

Od pewnego czasu tworze program który dynamicznie ładuje biblioteki dll funkcją LoadLibrary. Ponieważ biblioteki te są wtyczkami dla mojej aplikacji to czasami zachodzi potrzeba załadowania dwóch tych samych wtyczek jednoczesnie, i tu pojawia sie pewien problem. Jeśli mam powiedzmy plik xyz.dll i załaduje go 2 razy w mojej aplikacji to otrzymuje identyczne uchwyty (instancje) a co za tym idzie dane (zmienne) z jednego pliku xyz.dll nakładają się na drugi. Więc np. jeśli wtyczka xyz.dll tworzy okno i zapamiętuje jego uchwyt w swojej zmiennej to jesli załaduje kolejną wtyczke xyz.dll i ona rónież stworzy okno to owszem okno ma inny uchwyt, ale ten nowy uchwyt zostanie zapisany na miejsce poprzedniego i trace kontakt z jednym oknem (tym utworzonym na początku). To samo dzieje się ze wszystkimi zmiennymi przechowywanymi w dll.

Czy ktoś wie jak rozwiązać ten problem ?

P.S. Wiem że jednym z rozwiązań jest po prostu zamienienie nazw bibliotek dll, ale to rozwiązanie nie wchodzi w grę.

0

Jeśli dane się nakładają to zrób, to tak aby się nie nakładały - proste.
Dll wie kiedy jest ładowany i zwalniany - jest tam specjalna funkcja - można wtedy coś alokować, itp.
Inny sposób - przenieść te dane do exe.

0
fi napisał(a)

Jeśli dane się nakładają to zrób, to tak aby się nie nakładały - proste.
Dll wie kiedy jest ładowany i zwalniany - jest tam specjalna funkcja - można wtedy coś alokować, itp.
Inny sposób - przenieść te dane do exe.

Co do allokacji to też o tym myślałem, ale uchwyt tej allokacji gdzieś trzeba przechowywać, nie musze chyba mówic że jeśli go bede przechowywał w DLL to uchwyt również sie nałoży i dupa :-/ . Co do zmiennych w exe to nie wchodzi w gre bo to jest wtyczka a nie zwykla DLL (a wtyczke przeważnie robi osoba która nie ma dostepu do kodu exe).

0

Nie znam szczegółów... są tu minimum trzy możliwości:

  1. parametry funkcji (z tego dll) pozwalają zidentyfikować, o które okno chodzi -
    np. jest dany hwnd lub jakiś identyfikator...
  2. okna są tworzone z oddzielnych wątków - wtedy wystarczy użyć tzw. tls
  3. twórca aplikacji nie przewidział ładowania kilka razy jednej wtyczki :)
0

Rozwiązanie już znalazłem, nie obylo sie bez allokacji tyle ze jej uchwyt przechowuje w dodatkowej zmiennej, która jest w interfejdie wtyczki(tworzonej przez exe) a nie w samej DLL. A co do okien to był tylko przyklad, mi chodzilo ogolnie o zmienne przechowywane w DLL.

P.S. fi dzieki za odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1