関数呼出 2-1 (別プロジェクトのモジュール(.lib),静的リンク)
これから別のモジュール (ライブラリ) で実装された関数を呼び出す方法を見ていきます。大きく分けて、
- スタティックライブラリ (.lib) を静的リンク
- ダイナミックライブラリ (.dll) を動的リンク、暗黙的ロード
- ダイナミックライブラリ (.dll) を動的リンク、明示的ロード
の3通りの方法があります。
実際に操作しながら確認してみます。
スタティックライブラリを使用する
まずは .lib ファイルを作ってみます
[ソリューション エクスプローラー] より、一番上のソリューション項目を右クリック
[追加] > [新しいプロジェクト] を押下します
"C++" が選択されていることを確認します。一番上にある "空のプロジェクト" を選択します
[次へ] を押下します
【備考】
[スタティック ライブラリ] を選択する方法もあります。ただ今回は1から作りたいため、"空のプロジェクト" を選択しています。
[プロジェクト名] に "MyLibStatic" と入力します
[作成] を押下します
これでソリューションにプロジェクトが追加されました。
[ソリューション エクスプローラー] にプロジェクト項目 "MyLibStatic" が増えたことを確認します
【備考】
ソリューションとは、複数のプロジェクトを管理するための枠組みです。今回、ソリューション "ConsoleApplication1" にプロジェクト "MyLibStatic" を追加しました。
[ソリューション エクスプローラー] よりプロジェクト "MyLibStatic" の [ソース ファイル] を右クリックします
(TODO)
(TODO)
(TODO)
(TODO)
int mylibstaticFunc() {
return 777;
}
(TODO)
(TODO)
(TODO)
#pragma once
int mylibstaticFunc();
(TODO)
(TODO)
(TODO)
[OK] を押下します
(TODO)
(TODO)
---
#include <stdio.h>
#include "MySource.h"
#include "../MyLibStatic/MyLibStatic.h"
int myFunc();
int main()
{
printf("Hello World!\n");
printf("myFunc: %d\n", myFunc());
printf("mySourceFunc: %d\n", mySourceFunc());
printf("mySourceFunc1: %d\n", mySourceFunc1(20));
printf("mySourceFunc2: %d\n", mySourceFunc2(1,30));
printf("mylibstaticFunc: %d\n", mylibstaticFunc());
}
int myFunc()
{
return 123;
}