Visual studio上のC++ライブラリのロード方式と方法:ダイナミックライブラリの静的ロード、ダイナミックライブラリの動的ロード、静的ライブラリのロード
3411 ワード
Visual studio上のC++ライブラリのロード方式と方法:ダイナミックライブラリの静的ロード、ダイナミックライブラリの動的ロード、静的ライブラリのロード動的ライブラリ静的ロード 第一歩:dll生成: ステップ2:dllのロード: 動的ライブラリ動的ロード スタティックライブラリロード ダイナミックライブラリ静的ロード
ステップ1:dllを生成するには:新規vsプロジェクト 追加.h .cppファイル vsプロジェクト属性の設定 構成プロパティをダイナミックライブラリに変更し、選択、アイテム->プロパティ->一般->構成タイプ->ダイナミックライブラリ(dll) コンパイルマクロを追加、選択、「項目->属性->C/C+->プリプロセッサ->プリプロセッサ定義」にAPIEXPORTマクロを追加 ソリューションの生成 add.hファイル内容
add.cppファイル内容
ステップ2:dllのロード:新規vsプロジェクト メインプログラムエントリ関数を追加する.cppファイル(main関数を含むソースファイル) 第1ステップ生成dllに追加する.hファイルdllファイルlibファイル .h .libは自由に置くことができ、使用時、正しい経路を指定すればよい 放置する.dllファイルは和にあります.exeファイル同一ディレクトリ下
main.cppファイル内容
ダイナミックライブラリダイナミックロード
ステップ1:dllを生成するには:
この手順は、ダイナミックライブラリの静的ロードの最初のステップであるdllの生成を参照します.
ステップ2:dllのロード:新規vsプロジェクト メインプログラムエントリ関数を追加する.cppファイル(main関数を含むソースファイル) Windowsライブラリ関数でdllをロード LoadLibraryAロードdll GetProcAddress取得関数アドレス FreeLibraryリリースハンドル 第1ステップ生成dllに追加する.dllファイルlibファイル .libは自由に置くことができ、使用時、正しい経路を指定すればよい 放置する.dllファイルは和にあります.exeファイル同一ディレクトリ下
main.cppファイル内容
静的ライブラリのロード
ステップ1:libを生成するには:新規vsプロジェクト 追加.h .cppファイル vsプロジェクト属性の設定 構成プロパティをダイナミックライブラリに変更し、選択、アイテム->プロパティ->一般->構成タイプ->スタティックライブラリ(lib) ソリューションの生成 add.hファイル
add.cppファイル
ステップ2:dllのロード:新規vsプロジェクト メインプログラムエントリ関数を追加する.cppファイル(main関数を含むソースファイル) 第1ステップ生成libの追加.libファイルhファイル .lib .hファイルは自由に置くことができ、使用時、正しいパスを指定すればよい
main.cppファイル
注意事項動的ライブラリが必要_declspec(dllexport)エクスポートと_declspec(dllimport)ロード スタティックライブラリ不要_declspec(dllexport)と_declspec(dllimport) 私のGitHub 私のCSDN 私のGitee
ステップ1:dllを生成するには:
#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のロード:
main.cppファイル内容
//
#include
#include "add.h"//
#pragma comment(lib,"../Debug/libMathFunctions.lib")// .lib
int main()
{
std::cout<
ダイナミックライブラリダイナミックロード
ステップ1:dllを生成するには:
この手順は、ダイナミックライブラリの静的ロードの最初のステップであるdllの生成を参照します.
ステップ2:dllのロード:
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を生成するには:
#pragma once
int add(int elm1, int elm2);
add.cppファイル
#include "add.h"
int add(int elm1, int elm2)
{
return elm1 + elm2;
}
ステップ2:dllのロード:
main.cppファイル
//
#include
#include "math/add.h"
#pragma comment(lib,"../Debug/libMathFunctions.lib")
int main()
{
std::cout << add(1, 2);
return 0;
}
注意事項