2011-11-19 21 views
0

未解決の外部エラーを把握するのが難しいです。未解決の外部

私には2つのソリューションがあり、どちらもコアプロジェクトを共有しています。ソリューション#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プロジェクトのDependeciesプロジェクトでは、SnapEditプロジェクトはSnapCoreプロジェクトに依存しており、SnapCoreプロジェクトは依存関係がありません。 – SnapGames

答えて

0

あなたのことをよく理解していれば、SnapEditorは管理対象アプリケーションです。単にSnapCoreのようなネイティブライブラリを参照することはできません。 P/Invoke、またはwrite a managed wrapperを使用します。

+0

これが(おそらく)問題であれば、マネージドプロジェクトとしてコアをコンパイルすることもできます。いくつかの#defineが必要な場合や、管理対象クライアントと非管理対象クライアントの両方でコンパイルできるようにする必要がある場合があります。 – Mordachai

+0

これは私にとっては新しい問題であり、すべての質問に対してお詫び申し上げます。私は、P/InvokeオプションとIJWをgoogledしました。 P/InvokeはDLLを処理する必要がありますか?しかし、私のSnapCoreプロジェクトはlibをビルドします。さらに、P/Invoke、IJW、および管理されたラッパーを書くことはすべて、大量の作業を必要とするソリューションのように思えます。 Mordachai、SnapCoreのlibを管理されていないC++のlibの代わりに管理されたC++のlibにコンパイルできるように提案していますか?そうであれば、もっと簡単な選択肢になると思います。 – SnapGames

+1

SnapCoreが純粋なC++の場合、つまり、Win32 API関数を直接呼び出していない場合、単に.NET用に再コンパイルできます。 – kol