2009-07-16 15 views
0

ここでは、相互に依存するdllを2回構築する必要なしにビルドしたいと思っています(両方をビルドし、再度ビルドしてリンクできるようにする必要があります)。2つの相互依存するDLLを構築する

**DLL A** 

void fooA() 
{ 
    fooBB(); 
} 
void fooAA() 
{ 
    fooB(); 
} 

**DLL B** 

void fooB() 
{ 
    fooA(); 
} 

void fooBB() 
{ 
} 

市長のリファクタリングのないこれら二つのDLLを構築する方法があります:ここで

はexempleありますか?

答えて

0

実際にコンパイルするたびに両方のDLLを再構築しますか?

ない場合は、インポートライブラリが最初に作成する必要があります - リンクフェーズがあるため未解決の外部の故障した場合でも - とその後はエラーなしでリンクするビルドを許す...

編集:私たちは、実際にそのようなものを持っています私の店の依存関係の私たちのビルドは確かに増分であり、きれいなビルドでは、いくつかのプロジェクトを必要に応じて数回ビルドする必要があります。

+0

これは私が今すぐに欲しいものです。私は完全なビルドで1回のみ構築する方法が欲しいです。 – Drahakar

+0

インクリメンタルビルドが*本当に*オプションではない場合、私はjia3epが示唆しているもの以外の方法を知らない。私はまた、静的ライブラリにDLLの1つを変更することができたと思います。 –

+0

外部のキーワードは不要ですか? 2つの.objの間で動作することは分かっていますが、2つのプロジェクトの間で動作しますか? マニュアル/ LINKを使って手動コンパイル(VS上で/ c)しても問題ありませんか?なぜそうならない? – Drahakar

1

LoadLibaryGetProcAddrを使用して関数のアドレスを見つけ、そのアドレスでfoo関数を呼び出すことができます。

次のコードは、(あなたが本当のDLLでエラーチェックを追加する必要があります)、それを行う方法をdemonstates:

**DLL A** 

typedef void fooB(void); 
typedef void fooBB(void); 
fooB* fooB_ptr; 
fooBB* fooBB_ptr; 
HMODULE hDllB; 

void init() 
{ 
    hDllB = LoadLibrary(L"DllB.dll"); 
    fooB_ptr = reinterpret_cast<fooB*>(GetProcAddr(hDllB, L"fooB")); 
    fooBB_ptr = reinterpret_cast<fooBB*>(GetProcAddr(hDllB, L"fooBB")); 
} 

void done() 
{ 
    FreeLibrary(hDllB); 
} 

void fooA() 
{ 
    fooBB_ptr(); 
} 
void fooAA() 
{ 
    fooB_ptr(); 
} 

同じDLL Bに。

関連する問題