- MFC教程
- MFC-首页
- MFC - 概述
- MFC - 环境设置
- MFC - VC++ 项目
- MFC - 入门
- MFC - Windows 基础知识
- MFC - 对话框
- MFC - Windows 资源
- MFC - 属性表
- MFC - 窗口布局
- MFC-控制管理
- MFC-Windows 控件
- MFC - 消息和事件
- MFC-Activex 控件
- MFC-文件系统
- MFC——标准I/O
- MFC - 文档视图
- MFC-字符串
- MFC-卡雷
- MFC - 链接列表
- MFC - 数据库类
- MFC-序列化
- MFC——多线程
- MFC-- 互联网编程
- MFC-GDI
- MFC - 库
- MFC 有用资源
- MFC - 快速指南
- MFC - 有用的资源
- MFC - 讨论
MFC - 库
库是一组函数、类或其他资源,可以供需要已实现实体的程序使用,而无需知道这些函数、类或资源是如何创建的或它们如何运行。库使程序员可以轻松使用由其他人或公司创建的函数、类和资源等,并相信该外部源是可靠且高效的。与库相关的一些独特功能是 -
库的创建和运行类似于普通的常规程序,使用函数或其他资源并与其他程序进行通信。
为了实现其功能,库包含其他程序完成其功能所需的函数。
同时,库可能会使用其他程序不需要的某些功能。
使用库的程序也称为库的客户端。
您将创建或包含在库中的两种类型的函数 -
内部函数是仅由库本身使用的函数,库的客户端不需要访问这些函数。
外部函数是库的客户端可以访问的函数。
您将在程序中处理两大类库 -
- 静态库
- 动态库
静态库
静态库是包含外部程序可用来补充其功能的函数、类或资源的文件。要使用库,程序员必须创建到它的链接。该项目可以是控制台应用程序、Win32 或 MFC 应用程序。库文件的扩展名为 lib。
步骤 1 - 让我们通过创建一个新的 Win32 项目来研究静态库的简单示例。
步骤 2 - 在“应用程序向导”对话框中,选择“静态库”选项。
步骤 3 - 单击“完成”继续。
步骤 4 - 右键单击解决方案资源管理器中的项目,然后从“添加”→“新项目...”菜单选项添加头文件。
步骤 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_
步骤 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]; 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; } }
步骤 9 - 通过单击Build → Build MFCLib从主菜单构建此库。
步骤 10 - 当库构建成功时,它将显示上述消息。
步骤 11 - 要使用库中的这些函数,让我们添加另一个基于文件 → 新建 → 项目的 MFC 对话框应用程序。
步骤 12 - 转到 MFCLib\Debug 文件夹并将头文件和 *.lib 文件复制到 MFCLibTest 项目,如以下快照所示。
步骤 13 - 要将库添加到当前项目,请在主菜单上单击“项目”→“添加现有项”并选择“MFCLib.lib”。
步骤 14 - 设计对话框,如以下快照所示。
步骤 15 - 为值类型 double 的两个编辑控件添加值变量。
步骤 16 - 为静态文本控件添加值变量,该变量位于对话框的末尾。
步骤 17 - 添加计算按钮的事件处理程序。
要从库添加功能,我们需要将头文件包含在 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 项目来研究一个简单的示例。
步骤 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 扩展名测试此文件,我们需要从文件 → 新建 → 项目创建一个新的基于 MFC 对话框的应用程序。
步骤 11 - 转到 MFCDynamicLib\Debug 文件夹并将 *.dll 和 *.lib 文件复制到 MFCLibTest 项目,如以下快照所示。
步骤 12 - 要将 DLL 添加到当前项目,请在主菜单上单击“项目”→“添加现有项”,然后选择“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 计算后的结果。