C言語で遅延バインディングを実現するにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/2085614

  •  21-09-2019
  •  | 
  •  

質問

遅れて達成する方法 バインディング C言語で?

役に立ちましたか?

解決

レイトバインディングは、あなたの実行環境があなたのために提供することをより多くの何か、本当にC言語自体の機能ではありません。

は多くのシステムは、リンカ/ローダの機能として結合繰り延べ提供し、あなたはまた、あなたができるように、そのライブラリ内のシンボルのアドレスを取得する(とdlopen(共有ライブラリを開くために)などdlsymとして明示的な呼び出しを使用することができますアクセスそれまたはそれを呼び出す)。

が遅くなってC標準に結合するだけ半ポータブルな方法がsystem()といくつかの策略を使用することも、少なくとも部分的に実装固有であることでしょう。

あなたはそんなに延期結合ではなく、多形性について話していない場合は、

は、あなたが関数ポインタでその効果を得ることができます。基本的に、あなたはそのタイプの方法を見つけるための関数ポインタと一緒にタイプのすべてのデータを持っているstructを作成します。次に、の "コンストラクタ" の(通常はののinit()の機能)で、あなたはそのタイプに関連する関数への関数ポインタを設定します。

あなたはまだあなたがそれを使用していない場合でも、すべてのコードを含める必要がありますが、の道という多型を取得することはできます。

であります

他のヒント

Cに結合

シンボルは常に決して実行時、コンパイル時に行われます。

図書館、またはそれを呼び出してと動的リンクは、Windows上でdlopen()との* nix上dlsym()、およびLoadLibrary()GetProcAddress()を介して行われます。

C言語で遅延バインディングを実現するにはどうすればよいでしょうか?

最も近い方法は、次のようなライブラリ (DLL) の動的ロードを使用することです。 ドロオープン & dlsym Linux 上で。それ以外の場合は、次の場所で直接利用できません。 C.

使用のObjective-CやLuaの。両方が容易Cとインターフェースすることができる遅延バインディングの言語である。

もちろん、あなた自身の名前解決スキームを実装することができますが、なぜ車輪を再発明する?

残念ながら、あなたはOSを指定していませんでした。 Unixでは、あなたは、共有ライブラリを使用するか、設定可能(プラグイン)モジュール構造を作成することができます。詳細については、あなたは便利なWebサーバのApache 1.3のソースコードを見つけることができます。 http://httpd.apache.org/download.cgiする

cppdevは一つであることが、唯一の彼/彼女の発言にスポットをヒットするようです。 、定義自体のを見てください。いくつかの単語でます:

  

バインディング、または動的結合、コンピュータプログラミング機構であります   オブジェクト時に呼び出されるメソッドは、名前でルックアップされています   実行時に。

他のすべての答えは、単に「名前で検索する」である主なポイントを、欠場ます。

必要な解決策は、名前(または署名によって)正しいものを選択する関数又は二と共に、関数へのポインタのルックアップテーブルに非常に類似であろう。私たちは、「ハッシュテーブル」と呼んでます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top