Visual studio上のC++ライブラリのロード方式と方法:ダイナミックライブラリの静的ロード、ダイナミックライブラリの動的ロード、静的ライブラリのロード


Visual studio上のC++ライブラリのロード方式と方法:ダイナミックライブラリの静的ロード、ダイナミックライブラリの動的ロード、静的ライブラリのロード
  • 動的ライブラリ静的ロード
  • 第一歩:dll生成:
  • ステップ2:dllのロード:
  • 動的ライブラリ動的ロード
  • スタティックライブラリロード
  • ダイナミックライブラリ静的ロード
    ステップ1:dllを生成するには:
  • 新規vsプロジェクト
  • 追加.h .cppファイル
  • vsプロジェクト属性の設定
  • 構成プロパティをダイナミックライブラリに変更し、選択、アイテム->プロパティ->一般->構成タイプ->ダイナミックライブラリ(dll)
  • コンパイルマクロを追加、選択、「項目->属性->C/C+->プリプロセッサ->プリプロセッサ定義」にAPIEXPORTマクロを追加
  • ソリューションの生成
  • add.hファイル内容
    #pragma once
    
    #ifdef APIEXPORT
    #define EXTERN_API extern "C" __declspec(dllexport)
    #else
    #define EXTERN_API extern "C" __declspec(dllimport)
    #endif
    
    EXTERN_API int add(int elm1, int elm2);
    

    add.cppファイル内容
    #include "add.h"
    
    int add(int elm1, int elm2)
    {
    	return elm1+ elm2;
    }
    

    ステップ2:dllのロード:
  • 新規vsプロジェクト
  • メインプログラムエントリ関数を追加する.cppファイル(main関数を含むソースファイル)
  • 第1ステップ生成dllに追加する.hファイルdllファイルlibファイル
  • .h .libは自由に置くことができ、使用時、正しい経路を指定すればよい
  • 放置する.dllファイルは和にあります.exeファイル同一ディレクトリ下

  • main.cppファイル内容
    //       
    #include 
    #include "add.h"//     
    #pragma comment(lib,"../Debug/libMathFunctions.lib")//  .lib     
    int main()
    {
    	std::cout<

    ダイナミックライブラリダイナミックロード
    ステップ1:dllを生成するには:
    この手順は、ダイナミックライブラリの静的ロードの最初のステップであるdllの生成を参照します.
    ステップ2:dllのロード:
  • 新規vsプロジェクト
  • メインプログラムエントリ関数を追加する.cppファイル(main関数を含むソースファイル)
  • Windowsライブラリ関数でdllをロード
  • LoadLibraryAロードdll
  • GetProcAddress取得関数アドレス
  • FreeLibraryリリースハンドル
  • 第1ステップ生成dllに追加する.dllファイルlibファイル
  • .libは自由に置くことができ、使用時、正しい経路を指定すればよい
  • 放置する.dllファイルは和にあります.exeファイル同一ディレクトリ下

  • main.cppファイル内容
    //       
    #include 
    #include 
    int main()
    {
    	HINSTANCE h = LoadLibraryA("libMathFunctions.dll");//   
    	typedef int(*FunPtr)(int a, int b);//      
    	if (h == NULL)
    	{
    		FreeLibrary(h);
    		printf("load lib error
    "); } else { FunPtr funPtr = (FunPtr)GetProcAddress(h, "add");// if (funPtr != NULL) { int result = funPtr(8, 3); printf("8 + 3 =%d
    ", result); } else { printf("get process error
    "); printf("%d", GetLastError()); } FreeLibrary(h);// } return 0; }

    静的ライブラリのロード
    ステップ1:libを生成するには:
  • 新規vsプロジェクト
  • 追加.h .cppファイル
  • vsプロジェクト属性の設定
  • 構成プロパティをダイナミックライブラリに変更し、選択、アイテム->プロパティ->一般->構成タイプ->スタティックライブラリ(lib)
  • ソリューションの生成
  • add.hファイル
    #pragma once
    int add(int elm1, int elm2);
    

    add.cppファイル
    #include "add.h"
    int add(int elm1, int elm2)
    {
    	return elm1 + elm2;
    }
    

    ステップ2:dllのロード:
  • 新規vsプロジェクト
  • メインプログラムエントリ関数を追加する.cppファイル(main関数を含むソースファイル)
  • 第1ステップ生成libの追加.libファイルhファイル
  • .lib .hファイルは自由に置くことができ、使用時、正しいパスを指定すればよい

  • main.cppファイル
    //     
    #include 
    #include "math/add.h"
    #pragma comment(lib,"../Debug/libMathFunctions.lib")
    int main()
    {
    	std::cout << add(1, 2);
    	return 0;
    }
    

    注意事項
  • 動的ライブラリが必要_declspec(dllexport)エクスポートと_declspec(dllimport)ロード
  • スタティックライブラリ不要_declspec(dllexport)と_declspec(dllimport)
  • 私のGitHub
  • 私のCSDN
  • 私のGitee