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

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

Patricia Arquette
リリース: 2024-12-12 22:58:14
オリジナル
660 人が閲覧しました

How to Dynamically Load and Call a Function from a DLL in C  ?

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

質問:

funci( ) で、この関数を C からロードしてアクセスしようとしています。ただし、「'func' はこのスコープで宣言されていません。」というエラーが発生します。 DLL のポインタを使用して関数にアクセスするにはどうすればよいですか?

答え:

ステップ 1: DLL をロードする

HINSTANCE hGetProcIDDLL = LoadLibrary("C:\path\to\test.dll");
ログイン後にコピー

これにより、DLL がプロセスにロードされます。

ステップ 2: 関数アドレスを解決する

GetProcAddress を使用して関数のアドレスを取得する必要があります。

typedef int (__stdcall *f_funci)(); // Define function pointer
f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "funci");
ログイン後にコピー

ステップ 3 : 関数アドレスの検証

関数アドレスが正常に取得されました。

if (!funci) {
  std::cout << "Could not locate the function" << std::endl;
  return EXIT_FAILURE;
}
ログイン後にコピー

ステップ 4: 関数を呼び出す

関数ポインターを取得したら、それを呼び出すことができます。

std::cout << "funci() returned " << funci() << std::endl;
ログイン後にコピー

ステップ 5: DLL を解放する(オプション)

FreeLibrary() を使用して DLL ハンドルを解放し、メモリから DLL をアンロードします。

FreeLibrary(hGetProcIDDLL);
ログイン後にコピー

追加のヒント:

  • WinAPI 関数 GetProcAddress には関数名を文字列として指定する必要があるため、必ず正しい名前です。
  • エクスポートされた関数の呼び出し規則 (__stdcall など) は、プログラムで関数ポインターを定義するときに使用される規則と一致する必要があります。
  • DLL から関数を適切にエクスポートすることが不可欠です。 __declspec(dllexport) 属性を使用して関数をエクスポートします。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート