0

いくつかのファイル形式で読み取り、データをマージする必要があるアプリケーションを開発しています。将来的には追加の形式をサポートしたい場合があるため、ファイルリーダーはDLLとして開発し、ユーザー入力に基づいて実行時にロードする必要があります。通常、一度に2つのDLLをロードします。抽象インターフェイス(このよう
に) を作成できると思っていましたが、(サブクラス化された)DLLクラスのそれぞれでファクトリ関数を使用すると、2つのDLLをロードすると、2つの関数定義が互いに干渉します。私は何かが足りないのですか?これを行うためのより良い方法はありますか?

ありがとう!

4

1 に答える 1

1

(コメントからアップグレード)

LoadLibraryを使用して DLL をロードすると、DLL へのハンドルが取得されます。このハンドルは、後でFreeLibraryで使用して DLL をアンロードする必要があります。

ハンドルを取得したら、 GetProcAddressを呼び出して関数へのポインターを取得できます。

サンプルコード:

auto library = LoadLibrary("sample.dll");
//test if library is null => error handling
auto func = GetProcAddress(library, "function");
//test if func is null => error handling
//you may need to cast func to a different function pointer
auto plugin = func();



//after use:
auto result = FreeLibrary(library);
//test for error

コメントで既に述べたように、別のコンテキスト(他の DLL または EXE) から DLL に割り当てられたメモリを決して解放しないでください。

于 2012-07-19T19:54:02.057 に答える