ホームページ >バックエンド開発 >C++ >C で DLL から関数を動的にロードして使用するにはどうすればよいですか?

C で DLL から関数を動的にロードして使用するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-20 14:28:10376ブラウズ

How Can I Dynamically Load and Use Functions from a DLL in C  ?

DLL から関数を動的にロードする

概要

動的リンクを使用すると、実行時に DLL から関数をロードでき、機能を拡張できます。あなたのプログラム。この記事では、これを実現する方法について説明します。

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 を正常にロードするには、関数を正しくエクスポートする必要があります。 DLL のソース コードに次の行を追加します:

int __declspec(dllexport) __stdcall funci() {
  // ...
}

関数の使用

関数のアドレスを取得したら、他の関数と同様に呼び出すことができます:

std::cout << "funci() returned " << funci() << std::endl;

DLL ハンドルの解放

リソースのクリーンアップのために、DLL ハンドルを解放することをお勧めします。不要になった場合の DLL ハンドル:

FreeLibrary(hGetProcIDDLL);

これらの手順に従うことで、DLL から関数を動的にロードして使用することができ、プログラムの柔軟性と拡張性が大幅に向上します。

以上がC で DLL から関数を動的にロードして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。