MFC-ライブラリ

A libraryは、これらの関数、クラス、またはリソースがどのように作成されたか、またはそれらがどのように機能するかを知る必要なしに、すでに実装されたエンティティを必要とするプログラムで利用できるようにすることができる関数、クラス、またはその他のリソースのグループです。ライブラリを使用すると、プログラマは他の人や会社が作成した関数、クラス、リソースなどを簡単に使用でき、この外部ソースが信頼性が高く効率的であると信頼できます。ライブラリに関連するいくつかのユニークな機能は次のとおりです。

  • ライブラリが作成され、通常の通常のプログラムのように機能し、関数または他のリソースを使用して、他のプログラムと通信します。

  • その機能を実装するために、ライブラリには、他のプログラムがその機能を完了するために必要な機能が含まれています。

  • 同時に、ライブラリは他のプログラムが必要としないいくつかの関数を使用する場合があります。

  • ライブラリを使用するプログラムは、ライブラリのクライアントとも呼ばれます。

作成する、またはライブラリに含める関数には2つのタイプがあります-

  • 内部関数は、ライブラリ自体によってのみ使用される関数であり、ライブラリのクライアントはこれらの関数にアクセスする必要はありません。

  • 外部関数は、ライブラリのクライアントがアクセスできる関数です。

プログラムで扱うライブラリには、大きく分けて2つのカテゴリがあります。

  • 静的ライブラリ
  • ダイナミックライブラリ

静的ライブラリ

A static libraryは、外部プログラムがその機能を補完するために使用できる関数、クラス、またはリソースを含むファイルです。ライブラリを使用するには、プログラマはライブラリへのリンクを作成する必要があります。プロジェクトは、コンソールアプリケーション、Win32、またはMFCアプリケーションにすることができます。ライブラリファイルの拡張子はlibです。

Step 1 −新しいWin32プロジェクトを作成して、静的ライブラリの簡単な例を見てみましょう。

Step 2 − [アプリケーションウィザード]ダイアログボックスで、[静的ライブラリ]オプションを選択します。

Step 3 − [完了]をクリックして続行します。

Step 4 −ソリューションエクスプローラーでプロジェクトを右クリックし、[追加]→[新しいアイテム...]メニューオプションからヘッダーファイルを追加します。

Step 5 − [名前]フィールドにCalculator.hと入力し、[追加]をクリックします。

ヘッダーファイルに次のコードを追加します-

#pragma once
#ifndef _CALCULATOR_H_
#define _CALCULATOR_H_
double Min(const double *Numbers, const int Count);
double Max(const double *Numbers, const int Count);
double Sum(const double *Numbers, const int Count);
double Average(const double *Numbers, const int Count);
long GreatestCommonDivisor(long Nbr1, long Nbr2);
#endif // _CALCULATOR_H_

Step 6 −プロジェクトにソース(* .cpp)ファイルを追加します。

Step 7 − [名前]フィールドにCalculator.cppと入力し、[追加]をクリックします。

Step 8 − * .cppファイルに次のコードを追加します−

#include "StdAfx.h"
#include "Calculator.h"
double Min(const double *Nbr, const int Total) {
   double Minimum = Nbr[0];
   for (int i = 0; i < Total; i++)
      if (Minimum > Nbr[i])
         Minimum = Nbr[i];
   return Minimum;
}
double Max(const double *Nbr, const int Total) {
   double Maximum = Nbr[0];
   for (int i = 0; i < Total; i++)
      if (Maximum < Nbr[i])
         Maximum = Nbr[i];
   return Maximum;
}
double Sum(const double *Nbr, const int Total) {
   double S = 0;
   for (int i = 0; i < Total; i++)
      S += Nbr[i];
   return S;
}
double Average(const double *Nbr, const int Total) {
   double avg, S = 0;
   for (int i = 0; i < Total; i++)
       S += Nbr[i];
   avg = S / Total;
   return avg;
}
long GreatestCommonDivisor(long Nbr1, long Nbr2) {
   while (true) {
      Nbr1 = Nbr1 % Nbr2;
      if (Nbr1 == 0)
         return Nbr2;
      Nbr2 = Nbr2 % Nbr1;
      if (Nbr2 == 0)
         return Nbr1;
   }
}

Step 9 −メインメニューからクリックしてこのライブラリを構築します Build → Build MFCLib

Step 10 −ライブラリが正常に構築されると、上記のメッセージが表示されます。

Step 11 −ライブラリからこれらの関数を使用するには、[ファイル]→[新規]→[プロジェクト]に基づいて別のMFCダイアログアプリケーションを追加します。

Step 12 −次のスナップショットに示すように、MFCLib \ Debugフォルダーに移動し、ヘッダーファイルと* .libファイルをMFCLibTestプロジェクトにコピーします。

Step 13 −ライブラリを現在のプロジェクトに追加するには、メインメニューで[プロジェクト]→[既存のアイテムの追加]をクリックし、[MFCLib.lib]を選択します。

Step 14 −次のスナップショットに示すように、ダイアログボックスを設計します。

Step 15 −値タイプdoubleの両方の編集コントロールに値変数を追加します。

Step 16 −ダイアログボックスの最後にある静的テキストコントロールの値変数を追加します。

Step 17 − [計算]ボタンのイベントハンドラーを追加します。

ライブラリから機能を追加するには、CMFCLibTestDlg.cppファイルにヘッダーファイルをインクルードする必要があります。

#include "stdafx.h"
#include "MFCLibTest.h"
#include "MFCLibTestDlg.h"
#include "afxdialogex.h"
#include "Calculator.h"

Step 18 −ボタンイベントハンドラの実装は次のとおりです。

void CMFCLibTestDlg::OnBnClickedButtonCal() {
   // TODO: Add your control notification handler code here
   UpdateData(TRUE);
   CString strTemp;
   double numbers[2];
   numbers[0] = m_Num1;
   numbers[1] = m_Num2;

   strTemp.Format(L"%.2f", Max(numbers,2));
   m_strText.Append(L"Max is:\t" + strTemp);

   strTemp.Format(L"%.2f", Min(numbers, 2));
   m_strText.Append(L"\nMin is:\t" + strTemp);
   
   strTemp.Format(L"%.2f", Sum(numbers, 2));
   m_strText.Append(L"\nSum is:\t" + strTemp);

   strTemp.Format(L"%.2f", Average(numbers, 2));
   m_strText.Append(L"\nAverage is:\t" + strTemp);

   strTemp.Format(L"%d", GreatestCommonDivisor(m_Num1, m_Num2));
   m_strText.Append(L"\nGDC is:\t" + strTemp);

   UpdateData(FALSE);
}

Step 19 −上記のコードをコンパイルして実行すると、次の出力が表示されます。

Step 20−編集フィールドに2つの値を入力し、[計算]をクリックします。ライブラリから計算した後の結果が表示されます。

ダイナミックライブラリ

Win32 DLLは、MicrosoftWindowsコンピュータで実行されるプログラムで使用できるようにすることができるライブラリです。通常のライブラリとして、ファイルにグループ化された関数やその他のリソースで構成されています。

DLLの略語はダイナミックリンクライブラリの略です。これは、静的ライブラリとは対照的に、DLLを使用すると、プログラマが他のアプリケーションをこのタイプのライブラリにいつどのようにリンクするかを決定できることを意味します。

たとえば、DLLを使用すると、さまざまなアプリケーションが適切と思われる必要に応じてライブラリを使用できます。実際、さまざまなプログラミング環境で作成されたアプリケーションは、1つの特定のDLLに格納されている関数またはリソースを使用できます。このため、アプリケーションはライブラリに動的にリンクします。

Step 1 −新しいWin32プロジェクトを作成して、簡単な例を見てみましょう。

Step 2 − [アプリケーションの種類]セクションで、[DLL]ラジオボタンをクリックします。

Step 3 − [完了]をクリックして続行します。

Step 4 − MFCDynamicLib.cppファイルに次の関数を追加し、−を使用してその定義を公開します。

extern "C" _declspec(dllexport)

Step 5 − DLLの外部でアクセスされる各関数に_declspec(dllexport)修飾子を使用します。

// MFCDynamicLib.cpp : Defines the exported functions for the DLL application.//

#include "stdafx.h"

extern "C" _declspec(dllexport) double Min(const double *Numbers, const int Count);
extern "C" _declspec(dllexport) double Max(const double *Numbers, const int Count);
extern "C" _declspec(dllexport) double Sum(const double *Numbers, const int Count);
extern "C" _declspec(dllexport) double Average(const double *Numbers, const int Count);
extern "C" _declspec(dllexport) long GreatestCommonDivisor(long Nbr1, long Nbr2);

double Min(const double *Nbr, const int Total) {
   double Minimum = Nbr[0];
   for (int i = 0; i < Total; i++)
      if (Minimum > Nbr[i])
         Minimum = Nbr[i];
   return Minimum;
}
double Max(const double *Nbr, const int Total) {
   double Maximum = Nbr[0];
   for (int i = 0; i < Total; i++)
      if (Maximum < Nbr[i])
         Maximum = Nbr[i];
   return Maximum;
}
double Sum(const double *Nbr, const int Total) {
   double S = 0;
   for (int i = 0; i < Total; i++)
      S += Nbr[i];
   return S;
}
double Average(const double *Nbr, const int Total){
   double avg, S = 0;
   for (int i = 0; i < Total; i++)
      S += Nbr[i];
   avg = S / Total;
   return avg;
}
long GreatestCommonDivisor(long Nbr1, long Nbr2) {
   while (true) {
      Nbr1 = Nbr1 % Nbr2;
      if (Nbr1 == 0)
         return Nbr2;
      Nbr2 = Nbr2 % Nbr1;
      if (Nbr2 == 0)
         return Nbr1;
   }
}

Step 6 − DLLを作成するには、メインメニューで[ Build > Build MFCDynamicLib メインメニューから。

Step 7 − DLLが正常に作成されると、出力ウィンドウにメッセージが表示されます。

Step 8 − Windowsエクスプローラーを開き、次に現在のプロジェクトのデバッグフォルダーを開きます。

Step 9 −dll拡張子のファイルとlib拡張子の別のファイルが作成されていることに注意してください。

Step 10 −このファイルをdll拡張子でテストするには、[ファイル]→[新規]→[プロジェクト]から新しいMFCダイアログベースのアプリケーションを作成する必要があります。

Step 11 −次のスナップショットに示すように、MFCDynamicLib \ Debugフォルダーに移動し、*。dllファイルと* .libファイルをMFCLibTestプロジェクトにコピーします。

Step 12 − DLLを現在のプロジェクトに追加するには、メインメニューで[プロジェクト]→[既存のアイテムの追加]をクリックし、[MFCDynamicLib.libファイル]を選択します。

Step 13 −次のスナップショットに示すように、ダイアログボックスを設計します。

Step 14 −値タイプdoubleの両方の編集コントロールに値変数を追加します。

Step 15 −ダイアログボックスの最後にある静的テキストコントロールの値変数を追加します。

Step 16 − [計算]ボタンのイベントハンドラーを追加します。

Step 17 − DLLを使用しているプロジェクトでは、アクセスされる各関数は、_declspec(dllimport)修飾子を使用して宣言する必要があります。

Step 18 −MFCLibTestDlg.cppファイルに次の関数宣言を追加します。

extern "C" _declspec(dllimport) double Min(const double *Numbers, const int Count);
extern "C" _declspec(dllimport) double Max(const double *Numbers, const int Count);
extern "C" _declspec(dllimport) double Sum(const double *Numbers, const int Count);
extern "C" _declspec(dllimport) double Average(const double *Numbers, const int Count);
extern "C" _declspec(dllimport) long GreatestCommonDivisor(long Nbr1, long Nbr2);

Step 19 −ボタンイベントハンドラの実装は次のとおりです。

void CMFCLibTestDlg::OnBnClickedButtonCal() {

   // TODO: Add your control notification handler code here
   UpdateData(TRUE);

   CString strTemp;
   double numbers[2];
   numbers[0] = m_Num1;
   numbers[1] = m_Num2;

   strTemp.Format(L"%.2f", Max(numbers,2));
   m_strText.Append(L"Max is:\t" + strTemp);

   strTemp.Format(L"%.2f", Min(numbers, 2));
   m_strText.Append(L"\nMin is:\t" + strTemp);

   strTemp.Format(L"%.2f", Sum(numbers, 2));
   m_strText.Append(L"\nSum is:\t" + strTemp);

   strTemp.Format(L"%.2f", Average(numbers, 2));
   m_strText.Append(L"\nAverage is:\t" + strTemp);

   strTemp.Format(L"%d", GreatestCommonDivisor(m_Num1, m_Num2));
   m_strText.Append(L"\nGDC is:\t" + strTemp);
 
   UpdateData(FALSE);
}

Step 20 −上記のコードをコンパイルして実行すると、次の出力が表示されます。

Step 21−編集フィールドに2つの値を入力し、[計算]をクリックします。DLLから計算した後の結果が表示されます。