DLL からの関数のインポート: 総合ガイド
ダイナミック リンク ライブラリ (DLL) をロードすると、C プログラムで外部共有ライブラリの機能を利用できるようになります。ただし、DLL 内の関数にアクセスするには、ヘッダー ファイルから関数をインポートするのとは異なるアプローチが必要です。
LoadLibrary による DLL のロード
LoadLibrary 関数は、DLL を次の場所にロードします。現在のプロセスのメモリ。このプロセスでは、DLL で定義された関数は自動的にインポートされません。
GetProcAddress による関数アドレスの取得
DLL がロードされたら、次のアドレスを取得する必要があります。使いたい機能。これは、GetProcAddress 関数を使用して行われます。
#include <windows.h> typedef int (__stdcall *f_funci)(); // Define function pointer type int main() { HINSTANCE hGetProcIDDLL = LoadLibrary("...") // Retrieve function address f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci"); }
上記のコード スニペットでは、インポートする関数を表す f_funci という関数ポインター タイプを定義します。 GetProcAddress 関数は、DLL 内の関数のアドレスを返します。
DLL からの関数のエクスポート
DLL から関数を適切にエクスポートするには、__declspec( dllexport) および __stdcall 属性。
int __declspec(dllexport) __stdcall funci() { // ... }
__declspec(dllexport) 属性は、関数を DLL からエクスポートする必要があることを示し、__stdcall 属性は DLL で使用される呼び出し規則を指定します。
DLL ハンドルの解放
DLL からインポートされた関数を使用した後は、ライブラリへのハンドルを解放することをお勧めします。これは、FreeLibrary 関数を使用して実現されます。
FreeLibrary(hGetProcIDDLL);
これらの手順に従うことで、DLL を動的にロードし、C でその関数にアクセスできます。この手法を使用すると、静的リンクや再コンパイルを必要とせずに、再利用可能なモジュールを利用してプログラムの機能を拡張できます。
以上がC で DLL から関数をインポートして使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。