私はしばらくの間、関数を動的にc ++にロードする方法を探していましたが、ようやく理解できたと思います。計画は次のとおりです。
- 関数を文字列としてC++に渡します(ソケット接続、ファイルなどを介して)。
- 文字列をファイルに書き込みます。
- C++プログラムにファイルをコンパイルして実行させます。エラーがある場合は、キャッチして返送してください。
- 新しい関数で新しく実行されたプログラムに、関数のメモリ位置を現在実行中のプログラムに渡してもらいます。
- 関数の場所を関数ポインター変数に保存します(関数は常に同じ戻り型と引数を持つため、これによりポインターの宣言が簡単になります)。
- 関数ポインタを使用して新しい関数を実行します。
問題は、ステップ4の後、新しいプログラムを実行し続けたくないということです。これを頻繁に実行すると、実行中の多くのプログラムがスレッドを吸い上げるためです。新しいプログラムを閉じるが、新しい関数が保存されているメモリの場所を保持する方法はありますか?使用中に上書きしたり、他のプログラムで利用したりしたくありません。
他のステップについても何か提案があれば、それもありがたいです。これと同様のことを行う他のライブラリがあるかもしれません、そしてそれらを推薦するのは良いです、しかしこれは私が調べたいアプローチです—それの達成のためでなければ、そうする方法を知るための知識のために。
編集:ダイナミックリンクライブラリを知っています。これは、C++での動作をよりよく理解するために私が主に調査しているものです。