MFC - Perpustakaan

SEBUAH libraryadalah sekumpulan fungsi, kelas, atau sumber daya lain yang dapat disediakan untuk program yang membutuhkan entitas yang telah diimplementasikan tanpa perlu mengetahui bagaimana fungsi, kelas, atau sumber daya ini dibuat atau bagaimana fungsinya. Perpustakaan memudahkan programmer untuk menggunakan fungsi, kelas, dan sumber daya, dll. Yang dibuat oleh orang atau perusahaan lain dan percaya bahwa sumber eksternal ini dapat diandalkan dan efisien. Beberapa fitur unik yang terkait dengan perpustakaan adalah -

  • Perpustakaan dibuat dan berfungsi seperti program biasa biasa, menggunakan fungsi atau sumber daya lain dan berkomunikasi dengan program lain.

  • Untuk mengimplementasikan fungsinya, pustaka berisi fungsi-fungsi yang dibutuhkan oleh program lain untuk menyelesaikan fungsinya.

  • Pada saat yang sama, perpustakaan dapat menggunakan beberapa fungsi yang tidak diperlukan oleh program lain.

  • Program yang menggunakan perpustakaan, juga disebut klien perpustakaan.

Ada dua jenis fungsi yang akan Anda buat atau sertakan di perpustakaan Anda -

  • Fungsi internal hanya digunakan oleh perpustakaan itu sendiri dan klien perpustakaan tidak memerlukan akses ke fungsi ini.

  • Fungsi eksternal adalah fungsi yang dapat diakses oleh klien perpustakaan.

Ada dua kategori perpustakaan yang akan Anda tangani dalam program Anda -

  • Perpustakaan statis
  • Perpustakaan dinamis

Perpustakaan Statis

SEBUAH static libraryadalah file yang berisi fungsi, kelas, atau sumber daya yang dapat digunakan program eksternal untuk melengkapi fungsinya. Untuk menggunakan perpustakaan, pemrogram harus membuat tautan ke perpustakaan itu. Proyek ini dapat berupa aplikasi konsol, Win32 atau aplikasi MFC. File perpustakaan memiliki ekstensi lib.

Step 1 - Mari kita lihat contoh sederhana pustaka statis dengan membuat Proyek Win32 baru.

Step 2 - Pada kotak dialog Application Wizard, pilih opsi Static Library.

Step 3 - Klik Selesai untuk melanjutkan.

Step 4 - Klik kanan pada proyek di explorer solusi dan tambahkan file header dari opsi menu Add → New Item….

Step 5 - Masukkan Calculator.h di kolom Name dan klik Add.

Tambahkan kode berikut di file header -

#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 - Tambahkan file sumber (* .cpp) di proyek.

Step 7 - Masukkan Calculator.cpp di kolom Name dan klik Add.

Step 8 - Tambahkan kode berikut di file * .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 - Bangun pustaka ini dari menu utama, dengan mengklik Build → Build MFCLib.

Step 10 - Ketika perpustakaan berhasil dibangun, itu akan menampilkan pesan di atas.

Step 11 - Untuk menggunakan fungsi-fungsi ini dari pustaka, mari kita tambahkan aplikasi dialog MFC lain berdasarkan File → New → Project.

Step 12 - Buka folder MFCLib \ Debug dan salin file header dan file * .lib ke proyek MFCLibTest seperti yang ditunjukkan pada snapshot berikut.

Step 13 - Untuk menambahkan perpustakaan ke proyek saat ini, pada menu utama, klik Proyek → Tambahkan Item yang Ada dan pilih MFCLib.lib.

Step 14 - Rancang kotak dialog Anda seperti yang ditunjukkan pada gambar berikut.

Step 15 - Tambahkan variabel nilai untuk kedua kontrol edit tipe nilai ganda.

Step 16 - Tambahkan variabel nilai untuk kontrol teks Statis, yang berada di akhir kotak dialog.

Step 17 - Tambahkan event handler untuk tombol Hitung.

Untuk menambahkan fungsionalitas dari perpustakaan, kita perlu menyertakan file header di file CMFCLibTestDlg.cpp.

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

Step 18 - Berikut adalah implementasi dari event handler tombol.

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 - Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut.

Step 20- Masukkan dua nilai di bidang edit dan klik Hitung. Anda sekarang akan melihat hasilnya setelah menghitung dari perpustakaan.

Perpustakaan Dinamis

Win32 DLL adalah pustaka yang dapat tersedia untuk program yang dijalankan di komputer Microsoft Windows. Sebagai pustaka normal, itu dibuat dari fungsi dan / atau sumber daya lain yang dikelompokkan dalam sebuah file.

Singkatan DLL adalah singkatan dari Dynamic Link Library. Ini berarti, sebagai lawan dari pustaka statis, DLL memungkinkan pemrogram untuk memutuskan kapan dan bagaimana aplikasi lain akan ditautkan ke pustaka jenis ini.

Misalnya, DLL memungkinkan aplikasi yang berbeda untuk menggunakan perpustakaannya sesuai keinginan dan kebutuhan. Faktanya, aplikasi yang dibuat pada lingkungan pemrograman yang berbeda dapat menggunakan fungsi atau sumber daya yang disimpan dalam satu DLL tertentu. Karena alasan ini, aplikasi secara dinamis menautkan ke perpustakaan.

Step 1 - Mari kita lihat contoh sederhana dengan membuat Proyek Win32 baru.

Step 2 - Di bagian Jenis Aplikasi, klik tombol radio DLL.

Step 3 - Klik Selesai untuk melanjutkan.

Step 4 - Tambahkan fungsi berikut di file MFCDynamicLib.cpp dan tunjukkan definisinya dengan menggunakan -

extern "C" _declspec(dllexport)

Step 5 - Gunakan pengubah _declspec (dllexport) untuk setiap fungsi yang akan diakses di luar DLL.

// 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 - Untuk membuat DLL, pada menu utama, klik Build > Build MFCDynamicLib dari menu utama.

Step 7 - Setelah DLL berhasil dibuat, Anda akan melihat tampilan pesan di jendela keluaran.

Step 8 - Buka Windows Explorer dan kemudian folder Debug dari proyek saat ini.

Step 9 - Perhatikan bahwa file dengan ekstensi dll dan file lain dengan ekstensi lib telah dibuat.

Step 10 - Untuk menguji file ini dengan ekstensi dll, kita perlu membuat aplikasi berbasis dialog MFC baru dari File → New → Project.

Step 11 - Buka folder MFCDynamicLib \ Debug dan salin file * .dll dan * .lib ke proyek MFCLibTest seperti yang ditunjukkan pada gambar berikut.

Step 12 - Untuk menambahkan DLL ke proyek saat ini, pada menu utama, klik Proyek → Tambahkan Item yang Ada, lalu pilih file MFCDynamicLib.lib.

Step 13 - Rancang kotak dialog Anda seperti yang ditunjukkan pada gambar berikut.

Step 14 - Tambahkan variabel nilai untuk kedua kontrol edit tipe nilai ganda.

Step 15 - Tambahkan variabel nilai untuk kontrol teks Statis, yang berada di akhir kotak dialog.

Step 16 - Tambahkan event handler untuk tombol Hitung.

Step 17 - Pada project yang menggunakan DLL, setiap fungsi yang akan diakses harus dideklarasikan menggunakan modifier _declspec (dllimport).

Step 18 - Tambahkan deklarasi fungsi berikut di file 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 - Berikut adalah implementasi dari event handler tombol.

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 - Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut.

Step 21- Masukkan dua nilai di bidang edit dan klik Hitung. Anda sekarang akan melihat hasilnya setelah menghitung dari DLL.