ホームページ >バックエンド開発 >C++ >LoadLibrary と GetProcAddress を使用して DLL 関数にアクセスする方法

LoadLibrary と GetProcAddress を使用して DLL 関数にアクセスする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 12:36:13557ブラウズ

How to Access DLL Functions Using LoadLibrary and GetProcAddress?

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

質問:

LoadLibrary ハンドルはどのように使用できますかで定義された関数にアクセスするにはDLL?

LoadLibrary は DLL をメモリにロードしますが、その関数は自動的にインポートされません。これには 2 番目の WinAPI 関数が必要です: GetProcAddress.

例:

#include <windows.h>
#include <iostream>

typedef int (__stdcall *f_funci)();

int main()
{
  HINSTANCE hGetProcIDDLL = LoadLibrary("C:\Documents and Settings\User\Desktop\test.dll");

  if (!hGetProcIDDLL) {
    std::cout << "could not load the dynamic library" << std::endl;
    return EXIT_FAILURE;
  }

  // Resolve function address using GetProcAddress
  f_funci funci = (f_funci) GetProcAddress(hGetProcIDDLL, "funci");
  if (!funci) {
    std::cout << "could not locate the function" << std::endl;
    return EXIT_FAILURE;
  }

  std::cout << "funci() returned " << funci() << std::endl;
  
  // Free the library handle when no longer needed
  FreeLibrary(hGetProcIDDLL);
  
  return EXIT_SUCCESS;
}

Dll Export:

関数を確認してください__declspec(dllexport) を使用して DLL から正しくエクスポートされ、 __stdcall 属性:

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

以上がLoadLibrary と GetProcAddress を使用して DLL 関数にアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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