動的リンクを使用すると、実行時に DLL から関数をロードでき、機能を拡張できます。あなたのプログラム。この記事では、これを実現する方法について説明します。
最初のステップは、DLL を現在のプロセスのメモリにロードすることです。これは、LoadLibrary 関数を使用して行われます。
HINSTANCE hGetProcIDDLL = LoadLibrary("path/to/test.dll");
DLL がロードされたら、呼び出したい関数のアドレスを見つける必要があります。このために、GetProcAddress 関数を使用します。
typedef int (__stdcall *f_funci)(); f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");
エクスポートされた関数のシグネチャと一致する関数ポインターの型を定義する必要があることに注意してください。この場合、これは整数を返し、引数を取らない関数です。
DLL を正常にロードするには、関数を正しくエクスポートする必要があります。 DLL のソース コードに次の行を追加します:
int __declspec(dllexport) __stdcall funci() { // ... }
関数のアドレスを取得したら、他の関数と同様に呼び出すことができます:
std::cout << "funci() returned " << funci() << std::endl;
リソースのクリーンアップのために、DLL ハンドルを解放することをお勧めします。不要になった場合の DLL ハンドル:
FreeLibrary(hGetProcIDDLL);
これらの手順に従うことで、DLL から関数を動的にロードして使用することができ、プログラムの柔軟性と拡張性が大幅に向上します。
以上がC で DLL から関数を動的にロードして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。