Mam dll zaprogramowany w C++ i exe zaprogramowany w Visual C++.Nie mogę skompilować rozwiązania z powodu "Błąd LNK2028: nierozwiązany token ..."
mam funkcje w dll zadeklarowane jako:
string __declspec(dllexport) ConfigureHAT(T_STRING pathFile);
I w projekcie exe I obejmują wszystkie pliki nagłówków i plik DLL.
I wywołania funkcji w DLL:
string ret = ConfigureHAT("file.txt");
A kiedy projekt wykonywalny jest skompilowany, nie jest on z kolejnych błędów:
1> HATdllTester.obj: Błąd LNK2028: nierozwiązanych żeton (0A000317) "klasa std :: basic_string, klasa std :: podzielnik> __cdecl ConfigureHAT (klasa std :: basic_string, klasa std :: podzielnik>)" (? ConfigureHAT @@ $$ FYA? AV? $ basic_s tring @ DU? $ char_traits @ D @ std @@ V $ $ allocator @ D @ 2 @@ std @@ V12 @@ Z) odwołanie do funkcji "prywatna: void __clrcall HATdllTester :: mainWindow :: buttonConfigure_Click (class System :: Object ^, klasy system :: EventArgs ^)” (? buttonConfigure_Click @ MainWindow @ HATdllTester @@ $$ FA $ AAMXP $ AAVObject systemu @@ P @ $ @ 4 AAVEventArgs @@ Z)
1> AssemblyInfo.obj: error LNK2028: nierozwiązanych żeton (0A000316) "klasa std :: basic_string, klasa std :: podzielnik> __cdecl ConfigureHAT (klasa std :: basic_string, klasa std :: podzielnik>)" (ConfigureHAT @@ $$ FYA? AV? $ Basic_string @ DU? $ Char_traits @ D @ std @@ V $ $ allocator @ D @ 2 @@ std @@ V12 @@ Z) odwołuje się funkcja "private void __clrcall HATdllTester :: MainWindow :: buttonConfigure_Click (klasy System :: Object ^, klasy System :: EventArgs ^)" (buttonConfigure_Click @ MainWindow @ HATdllTester @@ $$ FA $ AAMXP $? AAVObject @ systemu @@ P $ AAVEventArgs @ 4 @@ Z)
1> AssemblyInfo.obj: error LNK2019: nierozwiązanych zewnętrznych symbolu „class std :: basic_string, klasa std :: podzielnika> __cdecl ConfigureHAT (klasa std :: basic_string, klasa std :: allocator>) " (? ConfigureHAT @@ $$ FYA? AV? $ basic_string @ DU? $ char_traits @ D @ std @@ V $ $ allocator @ D @ 2 @@ std @@ V12 @@ Z) odwołanie do funkcji "private: void __clrcall HATdllTester :: mainWindow :: buttonConfigure_Click (class System :: Object ^, class System :: EventArgs ^) " (? ButtonConfigure_Click @ mainWindow @ HATdllTester @@ $$ FA $ AAMXP $ AAVObject @ System @@ P $ AAVEventArgs @ 4 @@ Z)
1> HATdllTester.obj: error LNK2001: nierozwiązanych zewnętrznych symbolu „class std :: basic_string, klasa std :: podzielnik> __cdecl ConfigureHAT (klasa std :: basic_string, klasa std: : allocator>) " (? ConfigureHAT @@ $$ FYA? AV? $ basic_string @ DU? $ char_traits @ D @ std @@ V $ $ allocator @ D @ 2 @@ std @@ V12 @@ Z)
Czy ktoś może mi pomóc? Czytam dużo podobnych wiadomości z tym samym błędem, ale nikt nie rozwiązuje mojego problemu.
Dzięki.
EDIT
Wreszcie mogę rozwiązać ten problem w tym pliku .lib wytworzonej w ramach projektu dll do projektu Właściwości -> Linker -> input -> Dodatkowe Zależności.
czy VC++ pozwala na użycie symboli C++ w bibliotece dll? AFAIK, musisz wyeksportować symbol w C, aby działał (np. "Extern" C "{/ * declaration * /}") – Geoffroy
Czy łączysz się z '.lib' wygenerowanym razem z' .dll'? (p.s: zwracanie 'std :: string' przez granicę DLL to bardzo zły pomysł.) – Simple
Tak, łączę się z .lib. Dlaczego bardzo zły pomysł zwraca std: string? Nie wiedziałem tego. – sansub