2013-09-26 10 views
5

Ich habe eine DLL in C++ programmiert und eine EXE in Visual C++ programmiert.Ich kann keine Lösung aufgrund "Fehler LNK2028: nicht aufgelöster Token ..."

Ich habe die Funktionen in DLL deklariert als:

string __declspec(dllexport) ConfigureHAT(T_STRING pathFile); 

Und in der exe-Projekt ich alle Header-Dateien und die DLL-Datei enthalten.

Ich rufe die Funktion in dll:

string ret = ConfigureHAT("file.txt"); 

Und wenn das ausführbare Projekt kompiliert wird, schlägt es mit den nächsten Fehler:

1> HATdllTester.obj: Fehler LNK2028: nicht aufgelöstes Token (0A000317) "Klasse std :: basic_string, Klasse std :: Allocator> __cdecl ConfigureHAT (Klasse std :: basic_string, Klasse std :: Allocator>)" (? ConfigureHAT @@ $$ FYA? AV? $ grundlegende_s tring @ DU? $ char_traits @ D @ std @@ V? $ Zuweiser @ D @ 2 @@ std @@ V12 @@ Z) verwiesen in der Funktion "private: void __clrcall HATdllTester :: mainWindow :: buttonConfigure_Click (Klasse System :: Object ^, Klasse System :: EventArgs ^)“ (? buttonConfigure_Click @ @ Mainwindow HATdllTester @@ $$ FA $ AAMXP $ AAVObject @ [email protected]@ P $ AAVEventArgs @ 4 @@ Z)

1> AssemblyInfo.obj: error LNK2028: nicht aufgelöste Token (0A000316) "Klasse std :: basic_string, Klasse std :: Allocator> __cdecl ConfigureHAT (Klasse std :: basic_string, Klasse std :: Allocator>)" (ConfigureHAT @@ $$ FYA? AV? $ Basic_string @ DU? $ Char_traits @ D @ std @@ V? $ Zuweiser @ D @ 2 @@ std @@ V12 @@ Z) in Funktion "private: void __clrcall HATdllTester :: Mainwindow :: buttonConfigure_Click (Klasse-System ^, Klasse Systemobjekt :: :: EventArgs ^)" verwiesen (buttonConfigure_Click @ @ Mainwindow HATdllTester @@ $$ FA $ AAMXP $? AAVObject @ [email protected]@ P $ AAVEventArgs @ 4 @@ Z)

1> AssemblyInfo.obj: Fehler LNK2019: nicht aufgelöstes externes Symbol „Klasse std :: basic_string, Klasse std :: Allocator> __cdecl ConfigureHAT (Klasse std :: basic_string, Klasse std :: allocator>) " (? ConfigureHAT @@ $$ FYA? AV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@ V12 @@ Z) referenziert in der Funktion "private: void __clrcall HATdllTester :: mainWindow :: buttonConfigure_Click (Klasse System :: Objekt ^, Klasse System :: EventArgs ^) " (? ButtonConfigure_Click @ mainWindow @ HATdllTester @@ $$ FA $ AAMXP $ AAVObject @ System @@ P $ AAVEventArgs @ 4 @@ Z)

1> HATdllTester.obj: error LNK2001: externes Symbol „class std :: basic_string, Klasse std :: Zuordner> __cdecl ConfigureHAT (Klasse std :: basic_string, Klasse std: : allocator>) " (? ConfigureHAT @@ $$ FYA? AV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ Zuweiser @ D @ 2 @@ std @@ V12 @@ Z)

Kann mir jemand helfen? Ich lese viele ähnliche Nachrichten mit dem gleichen Fehler, aber niemand löst mein Problem.

Danke.

EDIT

Schließlich löse ich das Problem, einschließlich der LIB-Datei im DLL-Projekt in Projekteigenschaften erzeugt -> Linker -> Eingang -> zusätzliche Abhängigkeiten.

+1

ermöglicht VC++ die Verwendung von C++ - Symbolen in dll? AFAIK, du musst das Symbol in C exportieren, damit es funktioniert (d. H. 'Extern" C "{/ * Deklaration * /}') – Geoffroy

+3

Verbindest du mit der '.lib', die neben der' .dll' generiert wird? (S.: Eine 'std :: string' über eine DLL-Grenze zurückzugeben ist eine sehr schlechte Idee.) – Simple

+1

Ja, ich verbinde mit der .lib. Warum ist eine sehr schlechte Idee, eine Std: String zurückzugeben? Ich wusste es nicht. – sansub

Antwort

3

Ich würde versuchen, Visual Studio-Projektkonfiguration zu ändern. Unter Allgemein> Common Language Runtime Support setzen Sie /clr anstelle von /clr:pure.

Verwandte Themen