2011-11-19 144 views
0

我有困難找出我未解決的外部錯誤。無法解析的外部

我有兩種不同的解決方案,都共享一個核心項目。解決方案#1稱爲SnapGame,解決方案#2稱爲SnapEditor。核心項目稱爲SnapCore。

我的SnapGame解決方案是一個Win32應用程序。它編譯,引用並鏈接SnapCore項目,沒有任何問題。

SnapEditor解決方案是Windows窗體應用程序。它編譯和引用SnapCore項目。但是,它不會正確鏈接。任何時候我嘗試引用SnapCore項目中的任何內容都會導致無法解析的外部錯誤。

SnapCore項目有一些GDI +支持類。 SnapCore項目中的所有類都位於SnapCore名稱空間下。

這裏是文件Form1.cpp:

#include "stdafx.h" 
#include "App.h" 
#include "Orient.h" 

using namespace SnapCore; 
using namespace SnapEdit; 

void Form1::Init() 
{ 
SnapCore::Orient orient; 

new App(); 
} 

這裏是鏈接錯誤,我得到:

1>Form1.obj : warning LNK4248: unresolved typeref token (01000049) for 'Gdiplus.GpCachedBitmap'; image may not run 
1>Form1.obj : error LNK2028: unresolved token (0A000019) "public: __clrcall SnapCore::App::App(void)" ([email protected]@@[email protected]) referenced in function "public: void __clrcall SnapEdit::Form1::InitSnapCore(void)" ([email protected]@[email protected]@$$FQ$AAMXXZ) 
1>Form1.obj : error LNK2028: unresolved token (0A00001A) "public: __clrcall SnapCore::Orient::Orient(void)" ([email protected]@@[email protected]) referenced in function "public: void __clrcall SnapEdit::Form1::InitSnapCore(void)" ([email protected]@[email protected]@$$FQ$AAMXXZ) 
1>Form1.obj : error LNK2019: unresolved external symbol "public: __clrcall SnapCore::App::App(void)" ([email protected]@@[email protected]) referenced in function "public: void __clrcall SnapEdit::Form1::InitSnapCore(void)" ([email protected]@[email protected]@$$FQ$AAMXXZ) 
1>Form1.obj : error LNK2019: unresolved external symbol "public: __clrcall SnapCore::Orient::Orient(void)" ([email protected]@@[email protected]) referenced in function "public: void __clrcall SnapEdit::Form1::InitSnapCore(void)" ([email protected]@[email protected]@$$FQ$AAMXXZ) 
1>C:\Work\PC\SnapEdit\SnapEdit\Debug\SnapEdit.exe : fatal error LNK1120: 4 unresolved externals 

我想不通,爲什麼不麻煩我SnapGame解決方案的鏈接,但SnapEditor解決方案不會。

任何幫助,將不勝感激。

+0

您是否指定SnapEditor依賴於SnapCore? – Mordachai

+0

是的。在SnapEdit解決方案的Project Dependecies下,SnapEdit項目依賴於SnapCore項目,並且SnapCore項目沒有依賴關係。 – SnapGames

回答

0

如果我理解你的話,SnapEditor是一個託管應用程序。它不能簡單地引用像SnapCore這樣的本地庫。使用P/Invoke,或write a managed wrapper

+0

如果這是問題(可能),那麼您也可以將您的核心編譯爲託管項目。你可能需要一些#defines或你有什麼讓它可以被託管和非託管客戶編譯...... – Mordachai

+0

這是整個問題對我來說是新的,所以我對所有的問題表示歉意。我搜索了P/Invoke選項和IJW。看起來像P/Invoke需要工作的DLL?但是,我的SnapCore項目構建了一個lib。此外,P/Invoke,IJW和編寫託管包裝器似乎都是需要大量工作的解決方案。 Mordachai,你是否建議我可以將我的SnapCore庫編譯成一個託管的C++ lib而不是非託管的C++ lib?如果是這樣的話,那麼我認爲這將是一個更簡單的選擇。 – SnapGames

+1

如果SnapCore是純C++,也就是說,它不直接調用任何Win32 API函數,那麼您可以簡單地重新編譯.NET。 – kol