Cプログラムで外部モジュールを動的にロードしますか?
-
03-07-2019 - |
質問
この問題は以前に解決されたと確信しており、どのように行われたか興味があります。実行時に、ディレクトリの内容をスキャンして機能をロードするコードがあります。
具体的には、関数呼び出しを追加できるようにするスクリプトエンジンを使用しています。コアエンジンが提供する機能は非常に限られています。ユーザーは、サードパーティのライブラリを介して追加の機能を追加できる必要があります。これには、エンジンでスキャンしてロードする必要があります。これはどのように行われますか?
解決
プラットフォームに依存します。 win32では、 LoadLibrary
を呼び出してDLLをロードし、 GetProcAddress
を使用してDLLから関数を取得します。 Unixyプラットフォームでは、同等のものは dlopen
および dlsym
です。
他のヒント
Linux / UNIXのPOSIX dlopen / dlsym / dlerror / dlclose関数を使用して、共有ライブラリを動的に開き、それらが提供するシンボル(関数を含む)にアクセスできます。 manページで詳細を確認してください。
このためにライブラリを使用したい場合は、GLib(GTK + UIツールキットの下にあるユーティリティライブラリ)をお勧めします。 " GModule "サブAPI。これにより、クリーンでポータブルな方法が実現します。これにより、関連する呼び出しを自分でラップする必要がなくなり、任意のサイズのCプログラムで非常に便利なGLibの残りの部分も使用できます。
所属していません StackOverflow