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