2014-11-04 48 views
1

我有兩個項目,第一個是C++控制檯應用程序,第二個是C++ CLR空項目。我想從控制檯調用函數並在CLR項目中使用它。我嘗試創建頭文件,將其包含在CLR項目中並使用#include「headername.h」並調用函數render3d(),但它給了我那些鏈接錯誤。如何從CLR C++窗體窗體中的C++控制檯項目調用函數?

錯誤29錯誤LNK2028:無法解析的標記(0A000934) 「無效__cdecl render3d(無效)」 函數「私人引用(render3d @@ $$ FYAXXZ?): 無效__clrcall DEMO :: MainForm的:: AddAnimebutton_Click (類 System :: Object ^,class System :: EventArgs ^)「 (?AddAnimebutton_Click @ MainForm @ DEMO @@ $$ FA $ AAMXP $ AAVObject @ System @@ P $ AAVEventArgs @ 4 @@ Z)E:\畢業 項目\ CPP ARENA DEMO新設計\ DEMO \ DEMO \ MainForm.obj DEMO

錯誤30錯誤LNK2019:無法解析的外部符號 「無效__cdecl render3d(無效)」(render3d @@ $$ FYAXXZ?)引用在函數「private: void __clrcall DEMO :: MainForm :: AddAnimebutton_Click(class System :: Object ^,class System :: EventArgs ^)」 (?AddAnimebutton_Click @ MainForm @ DEMO @@ $$ FA $ AAMXP $ AAVObject @系統@@ P $ @ AAVEventArgs 4 @@ Z)E:\畢業 項目\ CPP ARENA DEMO新設計\ DEMO \ DEMO \ MainForm.obj DEMO

錯誤31錯誤LNK1120:2周無法解析的外部E:\畢業 項目\ CPP ARENA DEMO新設計\ DEMO \發佈\ DEMO.EXE DEMO

+0

我會做一個只有頭文件的模塊,但是你可能會發現創建一個傳統的頭文件+ impl模塊更容易。然後你可以直接使用這些源文件,或者創建一個庫。控制檯項目中的 – 2014-11-04 18:19:54

+0

我有太多的源文件,所以每次我嘗試在CLR項目中使用這些源文件時都會出現太多錯誤。那爲什麼我不能直接使用它。 – 2014-11-04 19:09:14

回答

0

你可能要創建一個包含你要調用,並添加在p之間的相關性的函數庫rojects。 Visual Studio解決方案,然後將包含3個項目:

  • 庫render3d功能
  • 控制檯應用程序,它引用上述庫
  • CLR空項目,參照上述庫
+0

做的意思是我用render3d函數庫作爲其他兩個項目之間的連接? – 2014-11-04 18:57:31

+0

我的意思是如果你想在控制檯應用程序和你的CLR項目中使用它,你可能需要把函數放在另一個庫中。完成此操作後,您應該能夠從控制檯項目和CLR項目添加引用到庫(http://msdn.microsoft.com/en-us/library/wkze6zky%28v=vs.110%29的.aspx)。 – bialpio 2014-11-04 19:35:27

+0

我添加了從控制檯到庫的引用,從庫到CLR,並將這些代碼寫入庫。它再次給我這個鏈接錯誤。 (函數「public:static void __clrcall ClassLibrary :: Class1 :: callrender(void)」(?callrender)引用的無效令牌(0A000005)「void __cdecl render3d(void)」(?render3d @@ $$ FYAXXZ) @ Class1 @ ClassLibrary @@ $$ FSMXXZ) – 2014-11-04 20:14:48