2011-01-13 10 views
2

dllファイルをプロジェクトに静的にリンクする際に問題があります。私は私がすべての変更後、プロジェクトを再構築してきたし、それはまだ実行時にいくつかのdllファイルを要求ビルダーCもちろん++ 6.dllファイルを静的に含める

I've unchecked: 
Project \ Options \ Packages -> Build with runtime packages 
Project \ Options \ Linker -> Use dynamic RTL 
Project \ Options \ CodeGuard -> CodeGuard Validation 

I've also added dll files using Project Manager: 
myProject \ Add -> myFile.dll 

を使用しています。私は何を省略しましたか?

+0

DLLは* Dynamic-link * Libraryの略です。 – Philipp

答えて

2

DLLに静的にリンクすると、実際には、コンパイラがコードで呼び出しているDLL関数を検出し、リンカがアプリケーションのIMPORTSテーブルに挿入するスタブポインタを設定します。実行時に、アプリケーションが実行されると、OSローダーはまず、参照されたDLLをメモリにロードし、必要に応じて関数ポインタを更新することによってIMPORTSテーブル(他のものの中で)にパッチを当てます。これは、アプリケーション内のコードが実行される前に発生します。ローダーが参照を解決できない場合は、エラーが表示され、プロセスが終了します。 DLL自体はアプリケーション自体にコンパイルされません。それは外部ファイルとして残る必要があり(したがって、必要に応じて複数のアプリケーション/プロセスと共有することができます)、OSローダーがそれを見つけることができる場所にインストールする必要があります。これは、DLLの使用方法を示しています。変化するプロジェクトオプションはそれを変更するものではありません。

ライブラリコードをアプリケーションに直接コンパイルする場合は、DLLの代わりに静的ライブラリを作成する必要があります。

6

このようにDLLにリンクすることはできません。最初に.LIBを作成し、それにリンクする必要があります。

.LIBを作成できない場合は、.DEFを使用できます。 thisまたはGoogleを読んでください。

(ところで:ビルダーC++は、MSDN上と同じまたは同様の名前のツールを持っている)

0

の代わりに、独自のdllを追加し、あなたのプロジェクトに追加することができ、独自の静的ライブラリを作成するhere方法を参照してください。 dllを持っているだけの場合は、静的ライブラリを生成することはできません。インポートライブラリはdllからしか生成できません。そのためには、dllも配布する必要があります。

+0

Hmm ..私はこれらのオプションのチェックを外したことを私の投稿に書いたので、私はそれが静的リンクのために大丈夫だと理解しています。私は正しい?しかし..あなたの答えの2番目の部分は、私はまだライブラリを介してもdllを含める必要があることを明確に述べているので、私はdllを持っている。このような状況でダイナミックに滞在する方が簡単です。 – qlf00n

+0

申し訳ありませんが、私の間違いです。私は上書を "チェックされていない"。私は明らかに間違っているので、私の答えの最初の部分を削除します。 – wimh

関連する問題