Ładowanie bibliotek dll z wybranego katalogu

0

Witam.

    Ja jak zawsze z problemem;]

Otóż sprawa jest taka. Mam duży projekt, który korzysta z wielu bibliotek dll. I jak to bywa, każda jest wrzucona do katalogu głównego programu (razem z plikiem exe), co powoduje to spory chaos. Chciałbym umieści wszystkie dll w podkatalogu i stamtąd je ładowac, jednak domyślny sposób Windowsa na przeszukiwanie katalogów nie pozwala mi na coś takiego. Jak to ominąc?

Z góry dzięki za pomoc.

0

Musisz podać dokładną ścieżkę do .dll
Albo ustawić zmienną systemową PATH ze wskazaniem na katalog w którym znajduje sie .dll

Programowo możesz uzyskać ścieżkę do katalogu z którego jest uruchamiany program
i poprzez jej modyfikację podać katalog w którym znajduje się .dll .
To odnośnie ładowania dynamicznego , jeśli biblioteka jest połączona z programem statycznie
pozostaje PATH lub katalogi systemowe (ewent . katalog z którego jest uruchamiana aplikacja)

0

Dzięki, będę probował. Ale jakieś kolejne rady też chętnie przyjmę.

0

Znalazłem jeszcze coś takiego:

"Microsoft has offered a solution to all these problems. Each application can now store it own path the registry under the following key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

The use the application path, set a key for your application, using ONE.EXE from the example above:

HKEY_LOCAL_MACHINE...\CurrentVersion\App Paths\ONE.exe

Set the (Default) value to the full path of your executable, for example:

C:\Program Files\ONE\ONE.exe

Add a sub-key named Path, set it's value to the full path of the DLL, for example:

C:\Program Files\Common"

Tylko nie do końca rozumiem jak mam zmieniac te wpisy w rejestrze :/

0

to raczej nie o to chodzi :) poczytaj:

kolenosc przegladania sciezek: http://msdn2.microsoft.com/en-us/library/ms682586.aspx
[u Ciebie zapewne: Standard Search Order + If SafeDllSearchMode is disabled]

DLL Client Api: http://msdn2.microsoft.com/en-us/library/ms682599.aspx

w szczegolnosci SetDllDirectory: http://msdn2.microsoft.com/en-us/library/ms686203.aspx
zwroc uwage na opis parameters oraz remarks. funkcja pozwala na dodanie dowolnego katalogu do listy przeszukiwania

0

sorry, nie doczytalem tego co wkleiles. to tez moze pomoc - zwlaszcza z DLLkami ktore maja byc ladowane w momencie ladowania exeka, jeszcze przed jego wykonaniem

0

No właśnie. Zastanawiam się teraz, w którym miejscu użyc tego SetDllDirectory (pisze używając MFC)

0

jesli uzywasz LaodLIbrary/Ex - to w dowolnym miejscu przed nim. najlepiej w ktorejs metodzie inicjalizacyjnej aplikacji odpalanej zaraz po starcie. a jesli dll sa ladowane automatycznie (bo sa odniesienia wyryte w importach exeka) - to SetDllDIrectory nie pomoze

0

To ci raczej nie pomoze, ale jezeli nazwa w sekcji eksportu jest podana ze sciezka dostepu, to system szuka biblioteki tylko w tej sciezce.

Nawet jezeli biblioteka bedzie w katalobu Windows albo razem z programem to to i tak nie zostanie znaleziona ;-)

BCB 1.0 robil takie biblioteki, co sprawialo ze stawaly sie calkowicie bezuzyteczne do ladowania statycznego (sciezka byla sciezka do projektu z kodem zrodlowym)

0

zartujesz? ale bezsens :) mam nadzieje ze obecna wersja tego nie robi.. w aktualnych kompilatorach nie spotkalem sie z tym problemem -- w wyjsciowej binarce jest odniesienie tylko do nazwy pliku

0

Nie zartuje: tak robil BCB 1 (pozniejsze juz nie) i LCC - poprawialem dll-ki hex-edytorem (wklejalem zera i zostawialem tylko nazwe, wtedy dzialalo ;-) )

Jezeli chodzi o LCC, to chyba i najnowsza ostatania wersja tak robi

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