ホームページ >バックエンド開発 >C++ >C で DLL から関数を動的にロードして呼び出す方法

C で DLL から関数を動的にロードして呼び出す方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-08 11:29:10764ブラウズ

How to Dynamically Load and Call Functions from DLLs in C  ?

DLL からの関数の動的ロード

C で DLL (ダイナミック リンク ライブラリ) から関数を動的にロードすると、個別に定義された機能にアクセスできます。実行時のモジュール。この問題に対処する方法は次のとおりです。

1. DLL をロードします:

<br>HINSTANCE hDLL = LoadLibrary("path/to/dll.dll");<br>

このステップでは、DLL をメモリにロードし、ハンドルを返します。それ。

2.関数ポインターの取得:

DLL 内の関数にアクセスするには、GetProcAddress:

<br>typedef int (__stdcall *f_funci) を使用してそのアドレスを取得する必要があります。 )(); // 関数ポインターの型を定義します<br>f_funci funci = (f_funci)GetProcAddress(hDLL, "funci");<br>

この例では、関数の名前が「funci」であると想定し、次を使用します__stdcall 呼び出し規約。

3.関数の呼び出し:

関数ポインターを取得したら、他の関数と同じように関数を呼び出すことができます:

<br>int result = funci(); <br></p>
<p><strong></strong></p>4. DLL からの関数のエクスポート:<p></p>
<p>DLL では、他のモジュールからアクセスできるように、__declspec(dllexport) を使用して関数をエクスポートする必要があります:<br><br><pre class="brush:php;toolbar:false"><br>int __declspec(dllexport) __stdcall funci() {<br> // 関数定義</p>}<p>

追加のヒント:
  • DLL ハンドルが壊れている場合は、FreeLibrary() を使用して DLL ハンドルを解放することをお勧めします。必要なくなりました。
  • 関数のポインタ型と正確に一致する関数ポインタ型を使用してください。 DLL の署名。
DLL の読み込みや関数の解決に関する問題を処理するために、適切なエラー処理を確保します。

以上がC で DLL から関数を動的にロードして呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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