MFC-라이브러리

library이러한 함수, 클래스 또는 리소스가 어떻게 생성되었는지 또는 어떻게 작동하는지 알 필요없이 이미 구현 된 엔터티가 필요한 프로그램에서 사용할 수있는 함수, 클래스 또는 기타 리소스의 그룹입니다. 라이브러리를 사용하면 프로그래머가 다른 사람이나 회사에서 만든 함수, 클래스 및 리소스 등을 쉽게 사용할 수 있으며이 외부 소스가 신뢰할 수 있고 효율적이라는 것을 신뢰할 수 있습니다. 라이브러리와 관련된 몇 가지 독특한 기능은-

  • 라이브러리가 생성되고 함수 또는 기타 리소스를 사용하고 다른 프로그램과 통신하는 일반 일반 프로그램처럼 작동합니다.

  • 기능을 구현하기 위해 라이브러리에는 다른 프로그램이 기능을 완료하는 데 필요한 기능이 포함되어 있습니다.

  • 동시에 라이브러리는 다른 프로그램에 필요하지 않은 일부 기능을 사용할 수 있습니다.

  • 라이브러리를 사용하는 프로그램을 라이브러리의 클라이언트라고도합니다.

라이브러리에 만들거나 포함 할 함수에는 두 가지 유형이 있습니다.

  • 내부 함수는 라이브러리 자체에서만 사용되는 함수이며 라이브러리의 클라이언트는 이러한 함수에 액세스 할 필요가 없습니다.

  • 외부 기능은 라이브러리의 클라이언트가 액세스 할 수있는 기능입니다.

프로그램에서 다룰 라이브러리에는 두 가지 범주가 있습니다.

  • 정적 라이브러리
  • 동적 라이브러리

정적 라이브러리

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− 편집 필드에 두 개의 값을 입력하고 계산을 클릭합니다. 이제 라이브러리에서 계산 한 후 결과를 볼 수 있습니다.

동적 라이브러리

Win32 DLL은 Microsoft Windows 컴퓨터에서 실행되는 프로그램에서 사용할 수있는 라이브러리입니다. 일반 라이브러리로서 파일에 그룹화 된 함수 및 / 또는 기타 리소스로 구성됩니다.

DLL 약어는 Dynamic Link Library를 나타냅니다. 즉, 정적 라이브러리와 달리 DLL을 사용하면 프로그래머가 다른 응용 프로그램이 이러한 유형의 라이브러리에 연결되는시기와 방법을 결정할 수 있습니다.

예를 들어 DLL을 사용하면 서로 다른 응용 프로그램이 적절하고 필요에 따라 라이브러리를 사용할 수 있습니다. 실제로 서로 다른 프로그래밍 환경에서 만든 응용 프로그램은 하나의 특정 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 확장자로이 파일을 테스트하려면 File → New → Project에서 새로운 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− 편집 필드에 두 개의 값을 입력하고 계산을 클릭합니다. 이제 DLL에서 계산 한 후 결과를 볼 수 있습니다.