Jak korzystać z plików DLL innych firm w Visual Studio C++?
Rozumiem, że muszę użyć LoadLibrary (). Ale jakie inne kroki muszę podjąć, aby użyć pliku DLL innej firmy?
Po prostu wskoczyłem do C++ i jest to jedyna część, której nie dostaję (jako programista Java). Zastanawiam się tylko, jak Mogę używać Qt i biblioteki Tesseract-ocr, jednak proces ten nie ma dla mnie sensu i jest tak trudny do wygooglowania.
Jak powiedzieć kompilatorowi o funkcjach, których używam? Czy powinien być plik dołączony z sprzedawca zewnętrzny?
6 answers
Jak wszyscy mówią, LoadLibrary jest trudny sposób, aby to zrobić, i prawie nigdy nie jest konieczne.
The DLL should have come with a .plik lib do linkowania i jeden lub więcej plików nagłówkowych do #include w Twoich źródłach. Pliki nagłówkowe zdefiniują klasy i prototypy funkcji, które można użyć z biblioteki DLL. Będziesz tego potrzebować, nawet jeśli używasz LoadLibrary.
Aby połączyć się z biblioteką, być może będziesz musiał dodać .plik lib do konfiguracji projektu pod Linker / Input / Dodatkowe Zależności.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-30 15:26:24
Aby włączyć biblioteki DLL innych firm do mojego projektu C++ VS 2008 zrobiłem następujące (powinieneś być w stanie przetłumaczyć na 2010, 2012 itp.)...
Umieściłem pliki nagłówkowe w moim rozwiązaniu z innymi plikami nagłówkowymi, wprowadziłem zmiany w kodzie, aby wywoływać funkcje bibliotek DLL (inaczej po co to wszystko robimy?). :^) Potem zmieniłem build, aby połączyć kod LIB z moim EXE, skopiować biblioteki dll na miejsce i wyczyścić je, gdy zrobiłem "clean" - wyjaśniam te zmiany poniżej.
Załóżmy, że masz 2 biblioteki DLL innych firm, A.DLL oraz B.DLL i masz plik stub LIB dla każdego (A. LIB I B. LIB) i pliki nagłówkowe (A. H I B. h).
- Utwórz katalog" lib " w katalogu rozwiązania, np. używając Eksploratora Windows.
- skopiuj swoją stronę trzecią .LIB i .Pliki DLL do tego katalogu
(będziesz musiał wprowadzić kolejny zestaw zmian raz dla każdego używanego celu kompilacji źródeł (Debug, Release).)
-
Uzależnij swój EXE od plików LIB
- przejdź do Configuration Properties - > Linker - >Input - > Additional Dependencies i wypisz swoje.Pliki LIB pojedynczo oddzielone spacjami :
A.LIB B.LIB
- przejdź do Configuration Properties -> General - > Additional Library Directory i dodaj swój katalog " lib " do dowolnego, który już tam masz. Wpisy są oddzielone średnikami . Na przykład, jeśli masz już
$(SolutionDir)fodder
tam zmieniasz na$(SolutionDir)fodder;$(SolutionDir)lib
aby dodać "lib".
- przejdź do Configuration Properties - > Linker - >Input - > Additional Dependencies i wypisz swoje.Pliki LIB pojedynczo oddzielone spacjami :
-
Wymuś skopiowanie bibliotek DLL do katalogu wyjściowego
- przejdź do Configuration Properties -> Build Events- > post-Build Event
- umieść w wierszu poleceń (dla znaczenia przełącznika, zobacz " XCOPY/?"w oknie DOS):
XCOPY "$(SolutionDir)"\lib\*.DLL "$(TargetDir)" /D /K /Y
- możesz umieścić coś takiego do opisu:
Copy DLLs to Target Directory
- wyłączone z budowy powinny be
No
. KliknijOK
.
-
Powiedz VS, aby wyczyścił biblioteki DLL, gdy wyczyści folder wyjściowy:
- przejdź do właściwości konfiguracyjne - > ogólne - > rozszerzenia, aby usunąć po wyczyszczeniu, i kliknij "..."; dodaj
*.dll
na koniec listy i kliknijOK
.
- przejdź do właściwości konfiguracyjne - > ogólne - > rozszerzenia, aby usunąć po wyczyszczeniu, i kliknij "..."; dodaj
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-05 21:23:32
Są dwa sposoby użycia pliku DLL w systemie Windows:
Istnieje Biblioteka stub (.lib) z powiązanymi plikami nagłówkowymi. Gdy połączysz swój plik wykonywalny z plikiem lib, automatycznie załaduje on plik DLL podczas uruchamiania programu.
Ręczne ładowanie biblioteki DLL. Jest to zazwyczaj to, co chcesz zrobić, jeśli opracowujesz system wtyczek, w którym istnieje wiele plików DLL implementujących wspólny interfejs. Sprawdź dokumentację dla LoadLibrary i GetProcAddress aby uzyskać więcej informacji na ten temat.
Dla Qt podejrzewałbym, że są dostępne nagłówki i statyczna biblioteka, które możesz dołączyć i połączyć w swoim projekcie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-10 12:34:51
Aby używać Qt z dynamicznym linkowaniem należy podać pliki lib
(zazwyczaj qtmaind.lib
, QtCored4.lib
i QtGuid4.lib
dla konfiguracji "Debug") wProperties » Linker » Input » Additional Dependencies
.
Musisz również określić ścieżkę, w której znajdują się libs, czyli wProperties » Linker » General » Additional Library Directories
.
I musisz sprawić, aby odpowiednie .dll
s były dostępne w czasie wykonywania, przechowując je w tym samym folderze co .exe
lub w folderze, który znajduje się na twojej ścieżce.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-04 14:50:27
Musisz używać LoadLibrary tylko wtedy, gdy chcesz opóźnić wiązanie i rozwiązać zaimportowane funkcje tylko w czasie wykonywania. Najprostszym sposobem korzystania z biblioteki dll innej firmy jest połączenie z .lib.
W odpowiedzi na Twój edit:
Tak, zewnętrzne API powinno składać się z biblioteki dll i / lub lib, które zawierają implementację i pliki nagłówkowe deklarujące wymagane typy. Musisz znać definicje typów niezależnie od metody, której używasz - dla LoadLibrary musisz zdefiniować funkcję wskaźniki, dzięki czemu można równie łatwo napisać własny plik nagłówka. Zasadniczo wystarczy użyć LoadLibrary, jeśli chcesz późnego wiązania. Jednym z ważnych powodów tego byłoby, jeśli nie jesteś pewien, czy dll będzie dostępny na komputerze docelowym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-30 15:22:52
I 'if you' re supposed to be able to use it, then 3rd-party library should have a *.plik lib oraz*.plik dll. Wystarczy dodać *.lib do listy plików wejściowych w opcjach 'Linker' twojego projektu.
To *.plik lib niekoniecznie jest biblioteką "statyczną" (zawierającą kod): zamiast tego *.lib może być tylko plikiem, który łączy plik wykonywalny z biblioteką DLL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-30 15:08:50