我有一個用C++編程的dll,以及用Visual C++編程的exe。由於「錯誤LNK2028:未解析的令牌...」我無法編譯解決方案
我在DLL中的函數聲明爲:
string __declspec(dllexport) ConfigureHAT(T_STRING pathFile);
而在EXE項目包括我所有的頭文件和dll文件。
我調用該函數在DLL:
string ret = ConfigureHAT("file.txt");
而當可執行項目被編譯時,出現下一個錯誤:
1> HATdllTester.obj:錯誤LNK2028:無法解析的標記(0A000317) 「類 的std :: basic_string的,類 的std ::分配器> __cdecl ConfigureHAT(類 的std :: basic_string的,類 的std ::分配器>)」 (?ConfigureHAT @@ $$ FYA?AV?$基本tring @ DU @ $ char_traits @ D @ std @@ V $ $ allocator @ D @ 2 @@ std @@ V12 @@ Z) 在函數「private:void __clrcall 」中引用HATdllTester :: mainWindow :: buttonConfigure_Click(class System ::對象 ^,類系統:: EventArgs的^)」 (?buttonConfigure_Click @主窗口@ @@ HATdllTester $$ FA $ $ AAMXP @ AAVObject系統@@ P $ AAVEventArgs @ @@ 4 Z)
1> AssemblyInfo.obj:錯誤LNK2028:未解決的令牌(0A000316) 「類 的std :: basic_string的,類 的std ::分配器> __cdecl ConfigureHAT(類 的std :: basic_string的,類 的std ::分配器>)」 (ConfigureHAT @@ $$ FYA?AV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ V12 @@ Z) 在函數中引用「private:void __clrcall HATdllTester :: mainWindow :: buttonConfigure_Click(class System :: Object ^,class System :: EventArgs ^)」 (?buttonConfigure_Click @ mainWindow @ HATdllTester @@ $$ FA $ AAMXP $ AAVObject @ @@系統P $ AAVEventArgs @ @@ 4 Z)
1> AssemblyInfo.obj:錯誤LNK2019:解析外部符號「類 的std :: basic_string的,類 的std ::分配器> __cdecl ConfigureHAT(類 std :: basic_string,類 std :: allocator>)「 (?ConfigureHAT @@ $$ FYA?AV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ V12 @@ Z) 在函數「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:錯誤LNK2001:解析外部符號「類 的std :: basic_string的,類 的std ::分配器> __cdecl ConfigureHAT(類 的std :: basic_string的,類 STD: :allocator>)「 (?ConfigureHAT @@ $$ FYA?AV?$ basic_string @ DU?$ char_traits @ D @ std @@ V $ $ allocator @ D @ 2 @@ std @@ V12 @@ Z)
任何人都可以幫助我嗎? 我讀了很多類似的消息,但是沒有人解決我的問題。
謝謝。
編輯
最後,我解決了包括在dll項目到項目屬性生成的.lib文件中的問題 - >鏈接器 - >輸入 - >附加依賴。
VC++允許在dll中使用C++符號嗎? AFAIK,你必須在C中輸出符號才能工作(即'extern「C」{/ * declaration * /}') – Geoffroy
你是否在'.dll'旁邊生成'.lib'? (p.s:通過DLL邊界返回一個「std :: string」是一個非常糟糕的主意。) – Simple
是的,我正在鏈接.lib。爲什麼返回std:string是一個非常糟糕的主意?我不知道。 – sansub