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 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 th 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 th xem ch ng trình m t đo n ch ng trình đã đ c vi t s n. Trong đo nơ ươ ươ ượ ế
ch ng trình đó đã khai báo xây d ng các bi n, h ng s , các hàm các class. Khi xây d ng m tươ ế
ch ng trình m i, chúng ta th s d ng l i các bi n, h ng s , 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 d ng cái t p tin đ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 .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) 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 ch ng trình ngu n (source program) 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ườ ươ ươ ượ ượ
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 t o ra các k t qu . ế C th , trong C++/CLI, biên d ch 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 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 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) ế 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 ế ượ ượ
các th vi n s n thành m t file th c thi duy nh t (file. Exe). hai ki u liên k t 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 liên k t v i các file th vi n .lib. Cách này u đi m khi ch y ch c n file .exe 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 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 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 d đã đ c p trong các ch ng tr c, ch ng trình ng d ng 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 th đ c th c hi n b ng nhi u cách; cách thông d ng nh t chia code thành nh ng nhóm ượ
nh , m i nhóm này đ c g i m t th vi n (library). M i th vi n này th c ch t 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 m t u đi m n a n u nh ta xây d ng m t ch ng ư ư ế ư ươ
trình ng d ng khác trong ch ng trình m i này s d ng nh ng tài nguyên (hàm, bi n hay class) ươ ế
đã đ cy d ng trong m t th vi n c a ch ng trình tr c, ta 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 header file th ng đ c l u v i đuôi .h thay .cpp. Chúng ta th dùng notepad đ xây ườ ượ ư
d ng header file gi ng nh cách chúng tay 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 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 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 d trên, trong header file đã khai báo các bi n x,y,z 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 đã 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