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

C で DLL から関数をインポートして使用するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-14 05:41:09497ブラウズ

How Do I Import and Use Functions from DLLs in C  ?

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 サイトの他の関連記事を参照してください。

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