MFC - 图书馆

是一组函数,类或其他资源,可供需要已实现的实体的程序使用,而无需知道如何创建这些函数,类或资源或者它们如何运作.库使程序员可以轻松使用由他人或公司创建的功能,类和资源等,并相信该外部源是可靠和有效的.与库有关的一些独特功能是 :

  • 创建一个库,其功能类似于普通常规程序,使用函数或其他资源并与其他程序进行通信.

  • 为了实现其功能,库包含其他程序完成其功能所需的功能.

  • 同时,图书馆可能会使用其他程序不需要的某些功能.

  • 使用该库的程序也称为库的客户端.

您将创建或包含两种类型的函数你的库和减号;

  • 内部函数只能由库本身使用,而库的客户端不需要访问这些函数.

  • 外部函数是库的客户端可以访问的函数.

Th你将在你的程序中处理两大类库?减去;

  • 静态库

  • 动态库

静态库

静态库是一个文件包含外部程序可用于补充其功能的函数,类或资源.要使用库,程序员必须创建一个链接.该项目可以是控制台应用程序,Win32或MFC应用程序.库文件具有lib扩展名.

步骤1 : 让我们通过创建一个新的Win32项目来查看静态库的一个简单示例.

静态库

第2步 : 在"应用程序向导"对话框中,选择"静态库"选项.

静态库

第3步 : 单击"完成"继续.

静态库

步骤4 : 右键单击解决方案资源管理器中的项目,然后从Add&rarr添加头文件; New Item ...菜单选项.

静态库

步骤5 : 在Name字段中输入Calculator.h,然后单击Add.

在头文件中添加以下代码 :

#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__


第6步 : 在项目中添加源(* .cpp)文件.

静态库

第7步 : 在名称字段中输入Calculator.cpp,然后单击添加.

步骤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]; 
返回最低; 
} 
 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]; 
返回最大值; 
} 
 double Sum(const double * Nbr,const int Total){
 double S = 0; 
 for(int i = 0; i< Total; i ++)
 S + = Nbr [i]; 
返回S; 
} 
 double平均值(const double * Nbr,const int Total){
 double avg,S = 0; 
 for(int i = 0; i< Total; i ++)
 S + = Nbr [i]; 
 avg = S/Total; 
返回平均值; 
} 
长GreatestCommonDivisor(长Nbr1,长Nbr2){
而(true){
 Nbr1 = Nbr1%Nbr2; 
 if(Nbr1 == 0)
返回Nbr2; 
 Nbr2 = Nbr2%Nbr1; 
 if(Nbr2 == 0)
返回Nbr1; 
} 
}


第9步 : 通过单击 Build → 从主菜单构建此库.构建MFCLib .

静态库

第10步 : 成功构建库后,它将显示上述消息.

步骤11 : 要从库中使用这些函数,让我们添加另一个基于File&rarr的MFC对话框应用程序;新的 → 项目.

静态图书馆

第12步 : 转到MFCLib \Debug文件夹并将头文件和* .lib文件复制到MFCLibTest项目,如以下快照所示.

静态库

步骤13 : 要将库添加到当前项目,请在主菜单上单击Project → 添加现有项目并选择MFCLib.lib.

步骤14 : 设计对话框,如下面的快照所示.

静态库

第15步 : 为值类型为double的两个编辑控件添加值变量.

静态库

第16步 : 为静态文本控件添加值变量,该变量位于对话框的末尾.

静态库

第17步 : 为Calculate按钮添加事件处理程序.

要从库中添加功能,我们需要在CMFCLibTestDlg.cpp文件中包含头文件.

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


步骤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); 
}


第19步 : 编译并执行上面的代码时,您将看到以下输出.

静态库

第20步 : 在编辑字段中输入两个值,然后单击"计算".现在,您将从库中计算出结果.

静态库

动态库

Win32 DLL是一个可供Microsoft Windows计算机上运行的程序使用的库.作为普通库,它由分组在文件中的函数和/或其他资源组成.

DLL缩写代表动态链接库.这意味着,与静态库相反,DLL允许程序员决定何时以及如何将其他应用程序链接到这种类型的库.

例如,DLL允许不同的应用程序,以便在他们认为合适和必要时使用其库.实际上,在不同编程环境中创建的应用程序可以使用存储在一个特定DLL中的函数或资源.因此,应用程序会动态链接到库.

步骤1 : 让我们通过创建一个新的Win32项目来看一个简单的例子.

Dynamic Library

第2步 : 在"应用程序类型"部分中,单击"DLL"单选按钮.

动态库

第3步 : 单击"完成"继续.

步骤4 : 在MFCDynamicLib.cpp文件中添加以下函数,并使用 :

extern "C" _declspec(dllexport)


第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;
   } 
}


第6步 : 要创建DLL,请在主菜单上单击构建>从主菜单中构建MFCDynamicLib .

动态库

第7步 : 成功创建DLL后,您将在输出窗口中看到消息显示.

步骤8 : 打开Windows资源管理器,然后打开当前项目的Debug文件夹.

步骤9 : 请注意,已创建具有dll扩展名的文件和具有lib扩展名的另一个文件.

动态库

第10步 : 要使用dll扩展来测试此文件,我们需要从File&rarr创建一个新的基于MFC对话框的应用程序;新的 → 项目.

动态图书馆

步骤11 : 转到MFCDynamicLib \Debug文件夹并将* .dll和* .lib文件复制到MFCLibTest项目,如以下快照所示.

动态图书馆

第12步 : 要将DLL添加到当前项目,请在主菜单上单击Project → 添加现有项目,然后选择MFCDynamicLib.lib文件.

步骤13 : 设计对话框,如下面的快照所示.

动态库

第14步 : 为值类型为double的两个编辑控件添加值变量.

动态库

第15步 : 为静态文本控件添加值变量,该变量位于对话框的末尾.

动态库

第16步 : 为计算按钮添加事件处理程序.

步骤17 : 在使用DLL的项目中,必须使用_declspec(dllimport)修饰符声明要访问的每个函数.

步骤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);


第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);
}


第20步 : 编译并执行上面的代码时,您将看到以下输出.

动态库

第21步 : 在编辑字段中输入两个值,然后单击"计算".现在,您将从DLL计算后看到结果.

动态库