
L p trình ng d ng trong k thu tậ ứ ụ ỹ ậ Ch ng 4ươ
TÓM T T CH NG 4 : C++/CLI NÂNG CAO.Ắ ƯƠ
1) Th vi n (Library):ư ệ
Theo khoa h c máy tính, th vi n là m t thu t ng dùng đ ch các tài nguyên (resources) dùngọ ư ệ ộ ậ ữ ể ỉ
đ phát tri n ph n m m (software) hay ch ng trình (program). Các tài nguyên này có th là cácể ể ầ ề ươ ể
ch ng trình con (sobroutine), các class, các bi n hay h ng s đã đ c xây d ng s n. ươ ế ằ ố ượ ự ẵ Nói m t cáchộ
đ n gi n, chúng ta có th xem ch ng trình là m t đo n ch ng trình đã đ c vi t s n. Trong đo nơ ả ể ươ ộ ạ ươ ượ ế ẵ ạ
ch ng trình đó đã khai báo và xây d ng các bi n, h ng s , các hàm và các class. Khi xây d ng m tươ ự ế ằ ố ự ộ
ch ng trình m i, chúng ta có th s d ng l i các bi n, h ng s , hàm hay class đã đ c xây d ngươ ớ ể ử ụ ạ ế ằ ố ượ ự
trong th vi n b ng cách g i th vi n trong ch ng trình.ư ệ ằ ọ ư ệ ươ
Trong C++/CLI, chúng ta th ng g p các th vi n có d ng là cái t p tin có đuôi .h, t p tinườ ặ ư ệ ạ ậ ậ
đuôi .lib hay .dll. Tr c khi tìm hi u v s khác nhau gi a các th vi n .h, .lib và .dll, chúng ta hãy tìmướ ể ề ự ữ ư ệ
hi u v quá trình d ch (compile) và th c thi (execute) m t ch ng trình.ể ề ị ự ộ ươ
Hình trên mô t quá trình d ch và th c thi m t ch ng trình trong C++/CLI.ả ị ự ộ ươ
Biên d ch (Compile) ịlà quá trình chuy n các câu l nh đ c vi t b ng m t ngôn ng l p trìnhể ệ ượ ế ằ ộ ữ ậ
nào đó sang ngôn ng máy có th đ c thi hành tr c ti p trên máy tính. ữ ể ượ ự ế Ch ng trình ngôn ng c p caoươ ữ ấ
đ c chuy n đ i đ c g i là ch ng trình ngu n (source program) và ch ng trình ngôn ng máyượ ể ổ ượ ọ ươ ồ ươ ữ
đ c t o ra đ c g i là ch ng trình đ i t ng (object program) ho c mã đ i t ng (object code). Khiượ ạ ượ ọ ươ ố ượ ặ ố ượ
ng i dùng mu n ch y ch ng trình, ch ng trình đ i t ng s đ c n p lên b nh chính c a CPUườ ố ạ ươ ươ ố ượ ẽ ượ ạ ộ ớ ủ
và các ch th c a ch ng trình s đ c thi hành. Khi đ c h ng d n b i các ch th c a ch ngỉ ị ủ ươ ẽ ượ ượ ướ ẫ ở ỉ ị ủ ươ
trình, CPU s truy xu t d li u và t o ra các k t qu . ẽ ấ ữ ệ ạ ế ả C th , trong C++/CLI, biên d ch là quá trìnhụ ể ị
chuy n t file l p trình (file .cpp) sang file đ i t ng (file .obj). ể ừ ậ ố ượ
Sau khi biên d ch m t ch ng trình, s có r t nhi u các file .obj đ c t o ra. Ngoài ra, trongị ộ ươ ẽ ấ ề ượ ạ
ch ng trình còn s d ng các th vi n có s n. Do đó, c n ph i k t h p t t c l i thành m t file th cươ ử ụ ư ệ ẵ ầ ả ế ợ ấ ả ạ ộ ự
thi duy nh t, quá trình này đ c g i là liên k t (linker).ấ ượ ọ ế
B môn C đi n tộ ơ ệ ử Trang 1

L p trình ng d ng trong k thu tậ ứ ụ ỹ ậ Ch ng 4ươ
Liên k t (Linker) ếlà quá trình k t h p các file đ i t ng đ c t o ra t quá trình biên d ch vàế ợ ố ượ ượ ạ ừ ị
các th vi n có s n thành m t file th c thi duy nh t (file. Exe). Có hai ki u liên k t là liên k t tĩnhư ệ ẵ ộ ự ấ ể ế ế
(static linker) và liên k t đ ng (dynamic linker).ế ộ
Liên k t tĩnh :ế Các file .h, .cpp đ c d ch thành file .obj. Sau đó các file.obj đ c liên k t v iượ ị ượ ế ớ
nhau và liên k t v i các file th vi n .lib. Cách này có u đi m là khi ch y ch c n file .exe mà khôngế ớ ư ệ ư ể ạ ỉ ầ
c n thêm th vi n nào khác. Tuy nhiên có nh c đi m là file .exe có kích th c l n, n ng.ầ ư ệ ượ ể ướ ớ ặ
Liên k t đ ng :ế ộ Cũng t ng t nh liên k t tĩnh. Tuy nhiên kươ ự ư ế hi liên k t, các file .lib ch là trungế ỉ
gian ch a thông tin gi . Các thông tin th t đ c l y ra t các file .dll trong quá trình th c thi. Đo đó, khiứ ả ậ ượ ấ ừ ự
th c thi, ch ng trình s t đ ng liên k t đ n các file .dll. N u thi u các file .dll này thì quá trình th cự ươ ẽ ự ộ ế ế ế ế ự
thi s b l i.ẽ ị ỗ
Các file .lib và .dll là hai lo i th vi n th ng g p nh t trong C++/CLI : th vi n liên k t đ ngạ ư ệ ườ ặ ấ ư ệ ế ộ
(dynamic linking library), th vi n liên k t tĩnh (static library).ư ệ ế
2) Header file và source file :
Trong các ví d đã đ c p trong các ch ng tr c, ch ng trình ng d ng mà chúng ta xâyụ ề ậ ươ ướ ươ ứ ụ
d ng ch bao g m m t file duy nh t. Tuy nhiên, cách này ch thích h p đ i v i các ch ng trình nhự ỉ ồ ộ ấ ỉ ợ ố ớ ươ ỏ
không ph c t p. Đ i v i nh ng ch ng trình ng d ng l n, ph c t p, nên chia thành nhi u thành ph nứ ạ ố ớ ữ ươ ứ ụ ớ ứ ạ ề ầ
nh , m i thành ph n th c hi n m t nhi m v nh t đ nh. Vi c chia ch ng trình thành nh ng ph nỏ ỗ ầ ự ệ ộ ệ ụ ấ ị ệ ươ ữ ầ
nh có th đ c th c hi n b ng nhi u cách; cách thông d ng nh t là chia mã code thành nh ng nhómỏ ể ượ ự ệ ằ ề ụ ấ ữ
nh , m i nhóm này đ c g i là m t th vi n (library). M i th vi n này th c ch t là m t file riêng;ỏ ỗ ượ ọ ộ ư ệ ỗ ư ệ ự ấ ộ
khi biên d ch, m i file đ c biên d ch thành m t file đ i t ng riêng (file .obj), sau đó các file này sị ỗ ượ ị ộ ố ượ ẽ
đ c liên k t l i trong quá trình liên k t thành m t file th c thi duy nh t (file .exe).ượ ế ạ ế ộ ự ấ
Vi c khai báo các th vi n này còn có m t u đi m n a là n u nh ta xây d ng m t ch ngệ ư ệ ộ ư ể ữ ế ư ự ộ ươ
trình ng d ng khác và trong ch ng trình m i này có s d ng nh ng tài nguyên (hàm, bi n hay class)ứ ụ ươ ớ ử ụ ữ ế
đã đ c xây d ng trong m t th vi n c a ch ng trình tr c, ta có th s d ng lai nh ng tài nguyênượ ự ộ ư ệ ủ ươ ướ ể ử ụ ữ
này mà không c n ph i xây d ng l i b ng cách s d ng l i th vi n này.ầ ả ự ạ ằ ử ụ ạ ư ệ
H u h t các th vi n th ng đ c tách thành hai d ng file : header file và source file.ầ ế ư ệ ườ ượ ạ
a) Header file :
Header file cũng t ng t nh các file l p trình mà chúng ta đã làm quen trong các ch ng tr c. Đi mươ ự ư ậ ươ ướ ể
khác bi t là header file th ng đ c l u v i đuôi .h thay vì .cpp. Chúng ta có th dùng notepad đ xâyệ ườ ượ ư ớ ể ể
d ng header file gi ng nh cách chúng ta xây d ng các file .cpp tr c đây (nh ng l u file v i đuôi .h),ự ố ư ự ướ ư ư ớ
ho c xây d ng tr c ti p trong 1 project.ặ ự ự ế
Đ t o m t header file trong 1 project, trong c a s Solution Explorer c a project, click chu t ph i vàoể ạ ộ ử ổ ủ ộ ả
dòng Header Files và ch n Add ->New Item (trong tr ng h p mu n s d ng m t header file đã có s nọ ườ ợ ố ử ụ ộ ẵ
thì ch n Existing Item).ọ
B môn C đi n tộ ơ ệ ử Trang 2

L p trình ng d ng trong k thu tậ ứ ụ ỹ ậ Ch ng 4ươ
Trong c a s Add New Item, ch n ki u file là header và nh p tên c a file vào ô Name.ử ổ ọ ể ậ ủ
Thông th ng, m t th vi n s bao g m m t header file và source file. Trong đó, header file ch ch aườ ộ ư ệ ẽ ồ ộ ỉ ứ
các khai báo v bi n, hàm hay class còn source file ch a mã l nh đ y đ c a các bi n, hàm và class đãề ế ứ ệ ầ ủ ủ ế
đ c khai báo trong header file.ượ
Header file + Source file = Complete source
VD : //Sinh_vien.h
using namespace System;
int x,y,z;
String^ A,B,C;
B môn C đi n tộ ơ ệ ử Trang 3

L p trình ng d ng trong k thu tậ ứ ụ ỹ ậ Ch ng 4ươ
void Print(String^ A);
UInt32 Fractorial (UInt16 a);
ref class Sinh_vien
{
public:
String^ Ho_ten;
UInt32 MSSV;
String^ Nganh_hoc;
void Show();
};
Trong ví d trên, trong header file đã khai báo các bi n x,y,z và A,B,C cùng các hàm Print() ,ụ ế
Fractorial() và class Sinh_vien. Chú ý là đây ch là các khai báo v bi n, hàm và class.ỉ ề ế
b) Source file :
N u nh header file ch a các khai báo thì source file s ch a mã l nh th c thi các khai báo. Source fileế ư ứ ẽ ứ ệ ự
có đuôi .cpp.
Đ t o m t source file trong 1 project, trong c a s Solution Explorer c a project, click chu t ph i vàoể ạ ộ ử ổ ủ ộ ả
dòng Source Files và ch n Add ->New Item (trong tr ng h p mu n s d ng m t source file đã có s nọ ườ ợ ố ử ụ ộ ẵ
thì ch n Existing Item).ọ
Trong c a s Add New Item, ch n ki u file là C++ File và nh p tên c a file vào ô Name.ử ổ ọ ể ậ ủ
B môn C đi n tộ ơ ệ ử Trang 4

L p trình ng d ng trong k thu tậ ứ ụ ỹ ậ Ch ng 4ươ
Trong source file ta s xây d ng các hàm đã khai báo trong header file.ẽ ự
VD : //Sinh_vien.cpp
#include “Sinh_vien.h”
using namespace System;
x = 10;
y = 20;
z = 8111;
A = “Nguyen Van A”;
B = “Co dien tu”;
C = “SPKT”;
void Print(String^ A)
{
Console::WriteLine(A);
}
UInt32 Fractorial (UInt16 a)
{
if (a > 1) return (a*Factorial(a-1));
else return 1;
}
void Sinh_vien::Show()
{
Console::WriteLine(Ho_ten);
Console::WriteLine(MSSV);
Console::WriteLine(Nganh_hoc);
}
B môn C đi n tộ ơ ệ ử Trang 5

