Zmiana lokalizacji bibliotek DLL

0

Witam,

Jak można zrobić, aby biblioteki DLL były w podfolderze, a nie w folderze z exe?
Próbowałem tym sposobem, ale za każdym razem program mówił, że nie może znaleźć bibliotek.

SetDllDirectory( "\launcherDLL" );
LoadLibrary( "\launcherDLL\sfml-network-2.dll" );
LoadLibrary( "\launcherDLL\sfml-system-2.dll" );
LoadLibrary( "\launcherDLL\libgcc_s_seh_64-1.dll" );
LoadLibrary( "\launcherDLL\libstdc++_64-6.dll" );

Pozdrawiam.

1

Ale z tego co kojarzę, to jak użyjesz SetDllDirectory to już w LoadLibrary dajesz samą nazwę dll'ki. Ewentualnie możesz pobrać sobie aktualny katalog w którym siedzi plik exe i na jego podstawie utworzyć nową ścieżkę.

Ewentualnie powinno zadziałać od razu bez SetDllDirectory jakbyś dał relatywną ścieżkę.

1

Poza tym sugerowałbym SetDllDirectory(".\\launcherDLL" );
A jeszcze lepiej wyciągnij aktualny folder uruchomionego programu i zapodaj ścieżkę bezwzględna.

0

Zmieniłem na:

SetDllDirectory("launcherDLL");
LoadLibrary("sfml-network-2.dll");
LoadLibrary("sfml-system-2.dll");
LoadLibrary("libgcc_s_seh_64-1.dll");
LoadLibrary("libstdc++_64-6.dll");

Lecz nadal bez skutku. W którym miejscu w kodzie to powinno być? Ja to umieszczam zaraz przed stworzeniem okna głównego.

0
SetDllDirectory(".\\launcherDLL" );

Też nie działa.

A jak mogę wyciągnąć ścieżkę bezwzględną programu?

0
int main(int argc,char *argv[])
  {
    cout<<argv[0]<<endl;
    return 0;
  }
0

Nawet, gdy podałem wszędzie pełne ścieżki nie działa.
Gdzie dokładniej powinno to ładowanie DLL być w kodzie?
Ja to daję zaraz przed stworzeniem okna głównego.

0

Wszytko jedno gdzie w kodzie, grunta aby przed pierwszym użyciem.

0

A że tak zapytam: czy to nie jest tak, że twój program jest zlinkowany z SFML i dlatego wymaga tych bibliotek? Jeśli tak, to dodaj ścieżkę do katalogu z tymi dll-kami do PATHa.

No chyba że rzeczywiście chcesz załadować sobie dllki za pomocą LoadLibrary() (choć nie widać, żeby obchodziły cię uchwyty zwracane przez tą funkcję :) ), a potem planujesz użyć GetProcAddress(), żeby móc wywołać jakieś funkcje z tych dllek.

P.S. Tak mnie naszło o tej możliwości po przeczytaniu tego:
http://en.sfml-dev.org/forums/index.php?topic=15928.0

0
Tomek2 napisał(a):

A że tak zapytam: czy to nie jest tak, że twój program jest zlinkowany z SFML i dlatego wymaga tych bibliotek? Jeśli tak, to dodaj ścieżkę do katalogu z tymi dll-kami do PATHa.

Dokładnie tak jest. :D A jeszcze zapytam, jak się dodaje ścieżkę do PATHa?

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