2013-09-26 13 views
5

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.

+1

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

+3

Czy łączysz się z '.lib' wygenerowanym razem z' .dll'? (p.s: zwracanie 'std :: string' przez granicę DLL to bardzo zły pomysł.) – Simple

+1

Tak, łączę się z .lib. Dlaczego bardzo zły pomysł zwraca std: string? Nie wiedziałem tego. – sansub

Odpowiedz

3

Chciałbym zmienić konfigurację projektu Visual Studio. W obszarze General> Common Language Runtime Support ustaw /clr zamiast /clr:pure.

Powiązane problemy