1
Đặt vấn đề
Những năm gần đây trong khoa học công nghệ đã có những bớc phát triển đột
phá, đặc biệt là trong công nghệ thông tin. Những ứng dụng hiệu quả của lĩnh vực
này nhanh chóng xâm nhập vào mọi hoạt động khác nhau của cuộc sống.
Thật vậy, trong lĩnh vực y-sinh mà cụ thể trong y-tế đã xuất hiện các phơng
pháp mới với thiết bị kỹ thuật tiên tiến có sự trợ giúp đắc lực của công nghệ thông
tin nhằm phục vụ chẩn đoán và điều trị bệnh. Có thể thấy rằng một trong những
công việc thờng xuyên phải làm là đo lờng các tham số phản ánh trạng thái của cơ
thể. Chính vì vậy để đáp ứng đợc nhu cầu này trên thực tế đã xuất hiện rất nhiều
chủng loại thiết bị kỹ thuật y tế khác nhau nh: máy điện tim, máy điện não, máy
siêu âm, máy chụp cát lớp, máy chiếu xạ, máy phân tích xét nghiệm vv trong đó
việc ứng dụng công nghệ thông tin đã đóng góp đáng kể cho ngành y tế, tạo điều
kiện thực hiện tốt các nhiệm vụ của ngành một cách nhanh chóng, chất lợng.
Nh vậy công nghệ máy tính, kỹ thuật điện tử và công nghệ phần mềm đã trở nên
những công cụ vô cùng quan trọng, không thể thiếu đợc trong các thiết bị điện tử y-
sinh hiện đại. Chúng là những bộ phận cấu thành nên hệ thống thiết bị, giúp thực
hiện những nhiệm vụ đặc biệt mà con ngời không thể thực hiện đợc hoặc nếu thực
hiện thì rất tốn kém và mất rất nhiều thời gian và thậm chí ảnh hởng đến tính mạng.
Đa số các thiết bị điện tử y-sinh hiện đại đều có hệ thống máy tính thu thập và xử lý
số liệu đo lờng y-sinh phục vụ việc phân tích chẩn đoán và ra quyết định điều trị. Vì
vậy xây dựng hệ thống thu thập số liệu đo lờng y-sinh có sự trợ giúp của máy tính và
công nghệ phần mềm là một trong những yêu cầu thiết yếu của ngành y tế trong nớc
nói chung và ở trong quân đội nói riêng.
Hiện nay hầu hết các phần mềm thu thập số liệu đo lờng nói chung đều đợc xây
dựng và phát triển dựa trên cơ sở các công nghệ COM, OLE, ActiveX. Do đó hiển
nhiên là cần tiến hành nghiên cứu các công nghệ này và các kỹ thuật phát triển phần
2
mềm dựa trên chúng đồng thời nghiên cứu bản chất, đặc điểm của các tín hiệu điện
sinh học để từ đó xây dựng hệ thống máy tính thu thập số liệu đo lờng y-sinh.
Với ý đồ nh trên, tôi đã chọn đề tài nghiên cứu " ứ
. Visual Basic sẽ đợc sử dụng để thiết kế giao diện chơng trình và giải quyết các
nhiệm vụ ở mức cao (mức ngời dùng), còn Visual C
++
sẽ giải quyết các vấn đề ở mức
thấp (mức phần cứng).
89":!6; Trong phần này sẽ tổng kết các vấn đề đã đợc nghiên cứu tìm
hiểu trong luận văn và đa ra kết luận về đánh giá kết quả cũng nh các hớng phát
triển tiếp theo.
Chơng 1
Tổng quan về công nghệ COM, OLE, ACTIVEX
1.1 Những vấn đề cơ bản về COM
1.1.1 COM là gì?
Trớc hết COM là chữ viết tắt trong thuật ngữ tiếng Anh: 17<=
1 nghiã là 1>?/79. Có rất nhiều cách hiểu khác nhau về
thuật ngữ này, dới đây nêu ra một vài quan niệm về COM :
COM là kiến trúc phần mềm cho phép xây dựng các hệ thống và các ứng dụng
từ các thành phần cung cấp bởi các dịch vụ phần mền khác nhau. Nó cũng là kiến
trúc cơ sở để xây dựng nền tảng cho các dịch vụ phần mềm ở mức cao hơn.
COM là một đặc tính dùng để viết các phần mềm có khả năng tái sử dụng chạy
trên các hệ thống máy tính đợc xây dựng dựa trên cơ sở là các thành phần của nó.
COM là một cấu trúc hạ tầng phức tạp cho phép các khách hàng và các đối t-
ợng giao tiếp thông qua quá trình và phạm vi của máy chủ.
COM là một phong cách lập trình chứa tập các quy tắc cần thiết để làm việc
trong môi trờng lấy Microsoft làm trọng tâm(làm nhân).
vv.
4
Nhng có lẽ các cách hiểu khác nhau về COM nh vậy có thể thâu tóm lại trong
một khái niệm tổng quát nh sau: /1@A#B*!:2C
D7D<BD>/1ED@2F.
Trong hệ thống phần mềm máy tính, COM dựa trên việc tái sử dụng dới dạng
Trong mô hình hớng đối tợng một client thờng sử dụng một đối tợng đợc tạo ra
từ một lớp. Trong Visual Basic, client thờng tạo ra đối tợng bằng cách dùng toán tử
IJ đi sau tên của một lớp. Sau khi đối tợng đã đợc tạo ra, client sử dụng đối tợng
bằng cách truy cập đến một trong các thuộc tính và phơng thức có sẵn của nó thông
qua một biến, đó là một tham chiếu dựa vào lớp để truy cập các /4!
của một đối tợng. Ví dụ, giả sử ta có một lớp , đoạn mã lệnh trong Visual Basic
dới đây sẽ tạo ra đối tợng K và sử dụng các thuộc tính và phơng thức của nó:
Dim Dog as Cdog ' L+<21@<:?
Set Dog=IJ Cdog ' MD+1@?N4/K
Dog.Name="Snoopy" ' (D!67:1@!@-
Dog.Park ' (.1@7%O
Trong ví dụ này rõ ràng việc truyền thông giữa client và đối tợng đợc thực hiện
thông qua việc truy cập đến một tập các thuộc tính tiềm ẩn và các phơng thức chung
và tập hợp này đợc biết đến nh là một +!của đối tợng.
Một ích lợi to lớn của lớp là cho phép tái sử dụng mã, có nghĩa là có thể dùng
lớp ở mọi chỗ trong một ứng dụng, giúp giảm tối thiểu mã thừa. Ngoài ra, các thuộc
tính và các phơng thức của lớp có thể loại bỏ đợc nếu nó không phải là !@-/
7%O!. Việc cải tiến các phơng thức của lớp chỉ đòi hỏi cú pháp gọi nó
không đợc thay đổi. Có nghĩa là chừng nào giao diện chung vẫn đợc giữ nguyên thì
có thể tạo ra bất kỳ sự thay đổi nào để cải tiến, thay đổi mã của một lớp mà không
làm ảnh hởng đến mã của client. Tuy nhiên một khi đã đa vào giao diện chung của
lớp một thuộc tính hoặc một phơng thức thì chúng ta không thể loại bỏ chúng đợc,
6
khía cạnh này mang tính chất cội nguồn, có nghĩa là giao diện chung phải đợc thiết
kế thật cẩn thận ngay từ đầu và sử dụng các quy tắc mà lớp đề ra. Từ đó cho phép
cải tiến, mở rộng mã đối tợng mà không phải viết lại mã client bằng cách sửa các lỗi
và nâng cấp thực hiện các phơng thức. Các client mới đợc xây dựng sau khi lớp đợc
sửa đổi hoặc nâng cấp có thể lấy đợc các u việt của bất cứ những gì đợc bổ xung vào
giao diện.
Ví dụ, hãy tởng tợng một phơng thức PD đợc thực hiện sau khi kết thúc
, SmallTalk và
Java. Kế thừa thực thi là một trong những cách để có đợc sự tái sử dụng mã trong
mô hình hớng đối tợng. Trong kế thừa thực thi khi một lớp đợc định nghĩa nó có thể
dùng lại mã của một lớp khác. Visual Basic hiện thời cha đợc hỗ trợ tính chất kế
thừa thực thi, do đó lấy Java để làm ví dụ giải thích kế thừa thực thi là nh thế nào.
Xét lớp Cdog của Java nh sau:
Class Cdog
{
Public String Name;UU(DM2S+NV$+W
Public void Bark()UUX/S+N
{/*Mã thực thi phơng thức ở đây*/}
Public void RollOver(int Rolls)UUX/S+N
{/*Mã thực thi phơng thức ở đây*/}
}
Lớp Cdog ở trên đợc xem nh là F7D4, lớp Cbeagle sau đây, đợc gọi là F7F
mở rộng lớp Cdog. Nó kế thừa toàn bộ các tiềm năng và phơng thức của lớp Cdog,
tức là lớp Cbeagle có thể dùng lại tất cả những gì mà Cdog có:
// Subclass
8
Class CBeagle extends CDog
{
// Trạng thái chó Beagle:
// (!@-Y4Y?":Z+Z.
Public String Color; UU(!@-1F41/V1/!W
// ứng xử của chó Beagle:
// 8%OPDVW?":Z+Z
// ẩn thực thi phơng thức Bark() của lớp Cdog:
Public void Bark()
{/* Mã thực thi phơng thức Bark() cho lớp CBeagle */}
// Cbeagle mở rộng CDog bởi việc thêm phơng thức mới:
FetchSlippers
Name
Cterrier
Bark
ChaseCar
Name
Cboxer
Bark
ScareMailman
Name
Cdog
Bark
RollOver
Name
10
Tóm lại, tính kế thừa thực thi cho phép một lớp tái sử dụng mã của một lớp khác
và nếu tính chất này đợc sử dụng một cách đúng đắn thì nó sẽ trở thành một phơng
pháp rất hiệu quả để bảo trì và mở rộng mã.
*.(-+>#V81D7$1W: đây là một đặc điểm rất quan trọng khác
nữa của OOP, cho phép một client có thể tham chiếu nhiều đối tợng khác nhau theo
cùng một cách thức cho dù chúng đợc tạo ra từ các lớp khác nhau và có những ứng
xử khác nhau, nhng tất nhiên các lớp này phải đợc mở rộng cùng từ một lớp nào đó.
Hình dới đây mô tả một client có thể sử dụng tham chiếu để truyền thông với
ba kiểu đối tợng:
Hình 1.3-Kế thừa thực thi mang tính đa hình
Xét đoạn mã Java sau:
// Phơng thức này chấp nhận tất cả các đối tợng tợng tơng thích với lớp ://
Public void MakeDogBark(CDog Dog)
{
Dog.Bark() // 2?"2+!N#$]27O"2+! //
việc mở rộng hệ thống.
Những điều trình bày ở trên chỉ ra rằng kế thừa thực thi chỉ có hiệu quả trong
những hoàn cảnh thích hợp, nó đợc sử dụng tốt nhất trong các ứng dụng nhỏ và các
tình huống đợc kiểm soát. Còn trên thực tế, việc tạo ra một thứ bậc kế thừa lớn, phức
tạp để thoả mãn các yêu cầu của một ứng dụng là vợt quá tầm với của tất cả, ngoại
12
trừ các lập trình viên có kinh nghiệm trong lập trình hớng đối tợng. Chính vì hạn chế
nh vậy của kế thừa thực thi mà đã trì hoãn trong thời gian dài sự phát triển của các
hệ thống lớn. Để khắc phục các kỹ s lập trình đã tìm ra đợc các phơng pháp tái sử
dụng mã mà không làm tổn hại đến khả năng mở rộng của các hệ thống lớn. Một
trong những phơng pháp đó đã xuất hiện trong phong cách lập trình giao diện cơ sở
và phát triển theo kiểu cấu thành đối tợng. Trong kiểu lập trình này, giao diện chung
đợc tách ra khỏi quá trình thực thi của đối tợng.
c/.Tách biệt giao diện khỏi quá trình thực thi
Phân tách giữa giao diện và thực thi là để hình thành nên việc tái sử dụng hộp
đen, đây cũng là một cách để cấu thành lên một đối tợng. Có nghĩa là giao diện sẽ
trở thành thuộc tầng trên cùng, nó là một kiểu dữ liệu độc lập đợc định nghĩa trên
chính nó và giao diện chung đợc định nghĩa bên trong của định nghiã lớp, đây là
một sự phát triển mạnh của OOP. Trong giao diện sẽ chứa tập các ký hiệu định
nghĩa cú pháp gọi chung đáp ứng các yêu cầu của client và nh vậy giao diện là một
tầng trung gian giữa client và các lớp thực thi, tách biệt các lớp với client sử dụng
nó. Ta có thể hình dung giao diện chung nh là một cam kết giữa client với các lớp.
Có thể dùng giao diện để tạo một tham chiếu đến đối tợng nhng không thể tạo đối t-
ợng từ giao diện. Điều này hoàn toàn có lý bởi vì một đối tợng đợc tạo ra đòi hỏi
phải có các tài nguyên dữ liệu và các thực thi phơng thức mà những thứ này lại
không có trong giao diện.
Có thể nhiều lớp thực thi cùng một giao diện: một giao diện định nghĩa cú pháp
gọi chính xác và cung cấp ngữ nghĩa không xác định trớc cho các phơng thức, điều
này cho phép mỗi tác giả của lớp tự do xác định ứng xử của đối tợng phù hợp với
từng phơng thức, phù hợp với yêu cầu riêng của mình.
không hỗ trợ, client có thể phát hiện điều này và bỏ qua đối tợng một cách dễ dàng.
Điều này cho phép các lập trình viên xem lại các thành phần và các ứng dụng một
cách độc lập. Các client cũ và các đối tợng cũ vẫn có thể làm việc nhịp nhàng với
các client mới và các đối tợng mới: đây chính là chìa khoá để tạo phiên bản trong
COM. Tuy nhiên COM phải làm việc xuyên qua các thành phần nhị phân và nó phải
giải quyết rất nhiều vấn đề tại mức vật lý để lấy đợc những ích lợi của lập trình theo
giao diện. Tiếp sau đây chúng ta sẽ điểm qua một số đặc trng tiêu biểu của COM,
rồi xem xét các thành phần bên trong của nó ở mục tiếp theo.
1.1.3 Các đặc trng chủ yếu của COM
COM cho phép các nhà lập trình có thể gửi đi các tệp nhị phân của mình mà
vẫn giấu đợc các thuật toán thực hiện ở bên trong. Đặc tính tái sử dụng mã nhị phân
của COM cho phép loại trừ đợc nhiều vấn đề xẩy ra trong khi biên dịch lại các ch-
ơng trình hoặc hệ thống chơng trình cải tiến và phát triển trên cơ sở sử dụng lại mã
nguồn. Điều này thể hiện ở chỗ: sự cải tiến và phát triển hệ thống chơng trình chủ
yếu chỉ tác động vào các thành phần COM hoặc biên dịch lại các thành phần của
COM dựa trên các thành phần COM đã có. Ví dụ đối với một phần mềm ứng dụng
đợc xây dựng dựa trên các mô hình COM, khi muốn thay đổi (chẳng hạn nh sửa
lỗi, vv) trong chơng trình thì chỉ cần tác động đến th viện liên kết động ( các tệp
dạng FileName.DLL) của nó, do các thành phần mô hình COM đợc chứa trong đó.
Các th viện này sẽ đợc biên dịch lại và đợc đa trở lại môi trờng mà không phơng hại
đến bất kỳ một ứng dụng nào đang sử dụng nó (các ứng dụng này đợc gọi là các
khách hàng). Điều này khoa học và hiệu quả hơn hẳn so với các chơng trình phần
15
mềm, hệ thống chơng trình đợc xây dựng dựa trên việc tái sử dụng mã nguồn, trong
đó mỗi một sự thay đổi nhỏ đều đòi hỏi phải biên dịch lại từng dòng lệnh trong ứng
dụng, một công việc vô cùng nặng nhọc và gây nhiều khó khăn và tốn kém cho việc
bảo trì, phát triển và mở rộng hệ thống.
Các thành phần COM cơ sở có thể đợc xây dựng trên các ^67D>
@67"2+!. Đặc điểm quý báu này của mô hình đối tợng thành phần có ý
nghĩa vô cùng to lớn trong việc tập trung lực lợng và trí tuệ của các lập trình viên ở
đơn lẻ để tạo ra 1@_ .EXE(ứng dụng nguyên khối) chạy độc lập, điều này dẫn
đến kích thớc của các tệp thực hiện lớn và mất nhiều thời gian khi chạy. Ngoài ra
mỗi khi thực hiện một sửa đổi bất kỳ vào mã nguồn của chơng trình đòi hỏi toàn bộ
ứng dụng phải đợc biên dịch lại từ đầu, điều này gây nên nhiều trở ngại cho việc duy
trì, sửa chữa, bổ xung, cải tiến và phát triển phần mềm ứng dụng. Phát triển thành
phần cơ bản đã giải quyết đợc các khó khăn đó và nhiều vấn đề khác liên quan đến
kiểu lập trình ứng dụng nguyên khối nh đã nêu ra ở trên. Các thành phần nhị phân
cho phép cập nhật đến nó một cách độc lập và có thể sử dụng ngay, do đó làm đơn
giản hơn việc duy trì và mở rộng ứng dụng sau khi đã đợc cài đặt trong sản phẩm.
Với các tính chất đã nêu trên đây, COM thực sự là một công nghệ thành phần cơ
bản có ý nghĩa to lớn trong việc phát triển các phần mềm ứng dụng và các hệ thống
thông tin lớn.
17
1.1.4 Các thành phần cơ bản của COM
Trớc khi xem xét các thành phần cơ bản của COM, ta tìm hiểu về một số khái
niệm quan trọng liên quan đến mô hình đối tợng thành phần:
Chuẩn nhị phân(Binary Standard):
Chuẩn nhị phân là một khái niệm vô cùng quan trọng, là một trong những yếu tố
quyết định sự tồn của COM. Đối với bất kỳ một nền cơ sở nào đợc đa ra(sự kết hợp
của phần cứng và hệ điều hành), COM đều có một cách thức chuẩn để bố trí các
<BO`BVtable (Virtual function table) trong bộ nhớ và một cách thức
chuẩn để gọi các chức năng thông qua con trỏ Vtable. Cấu trúc bảng chức năng ảo
Vtable trong bộ nhớ đợc gọi là "!aG7" bởi vì ở mức nhị phân nó hoàn
toàn đợc xác định bởi giao diện riêng biệt và môi trờng nền. Vtable không phụ thuộc
vào ngôn ngữ lập trình hoặc công cụ để tạo ra nó, vì vậy bất kỳ ngôn ngữ nào có khả
năng gọi các hàm thông qua con trỏ (nh ngôn ngữ C/C
++
, Small Talk, Ada, và thậm
chí cả Basic) đều có thể đợc sử dụng để tạo ra các thành phần có khả năng tơng tác
với nhau thông qua Vtable, tức là thông qua chuẩn nhị phân. Sự thực hiện hai hớng
. Các đối tợng thành phần hỗ trợ một giao diện cơ sở gọi là
Tb"J (phần sau sẽ tìm hiểu về giao diện này) đồng hành với tất cả các giao
diện khác, phụ thuộc vào các chức năng mà đối tợng thành phần muốn lộ ra.
Các đối tợng thành phần thờng có một vài dữ liệu kết hợp. Không giống các đối
tợng của C
++
, các đối tợng thành phần COM không bao giờ cho phép truy cập đầy đủ
trực tiếp đến một đối tợng khác mà luôn phải thông qua các Dc+. Đây
là đặc trng cơ bản của mô hình đối tợng thành phần COM, bởi ví nó cho phép COM
hoàn toàn duy trì đợc việc thâu tóm và xử lý dữ liệu-một yêu cầu cơ bản của một
chuẩn phần mềm thành phần thực sự. Khi toàn bộ sự truy cập dữ liệu thông qua các
phơng thức nằm ở một đối tợng trung gian(Proxy Object) thì nó cho phép thể hiện
tính "trong suốt "(thể hiện ở các lời gọi ngang quá trình hoặc ngang qua mạng)
Nh vậy với những tính chất trên đây, mô hình đối tợng thành phần là chuẩn nhị
phân nó đợc xây dựng dựa trên phong cách lập trình theo giao diện, trong đó những
yếu tố cơ bản gồm , +, F7 và ?. Các lớp đợc định nghĩa trong
các tệp nhị phân (ví dụ nh các th viện liên kết động DLL) gọi là các $DD. Chúng
cung cấp các khả năng cho client và tạo ra sự kết nối, tham chiếu giữa client với các
đối tợng có mã nhị phân tơng ứng trong tệp. Sau khi client đã kết nối đợc với một
đối tợng, để đạt đợc mục tiêu nó chỉ cần kích hoạt một phơng thức nào đó của đối t-
19
ợng, tất nhiên điều này chỉ thực hiện đợc trong các môi trờng lập trình hớng đối tợng
(OOP).
Trên đây là một vài khái niệm cơ bản trong mô hình đối tợng thành phần. Dới
đây sẽ lần lợt đi vào tìm hiểu các thành phần cơ bản trong COM:
a/.Đối tợng
Đối tợng có ba đặc trng cơ bản, gồm: 6MDM2/2/O
d (phơng thức hoạt động). Nhận dạng là đặc trng mang tính duy nhất để nhận ra
đối tợng từ nhiều đối tợng khác. Trạng thái là sự kết hợp dữ liệu với một đối tợng
riêng biệt. Hành vi ứng xử là thiết lập một phơng thức để hỏi hoặc vận dụng một
virtual ULONG AddRef() = 0;
virtual ULONG Release() = 0;
}
Tất cả các giao diện phải bắt nguồn trực tiếp hoặc gián tiếp từ giao diện
Tb"J- giao diện gốc, có nghĩa là một giao diện bất kỳ để thực hiện một đối t-
ợng COM đều phải kế thừa toàn bộ các phơng thức nhận đợc từ giao diện
Tb"J, bao gồm: e!DTD_+P_/P+$. Hình 1.5 minh hoạ ba
phơng thức của giao diện Tb"J luôn luôn xuất hiện ở trên cùng của bảng chức
năng ảo do con trỏ Vtable chỉ tới.
Client
Object
Client
QueryInterface
AddRef
Release
Method1
Method2
Method3
IUnknown
21
Hình 1.5-Các phơng thức của
IUnknown bao giờ cũng nằm trên cùng
Để có đợc tính không phụ thuộc vào ngôn ngữ lập trình, COM phải cung cấp
một cách thức chung để tạo ra các thông tin về các giao diện và các lớp thành phần
+$$ trên cùng của nó, đó chính là ngôn ngữ định nghĩa giao diện TK (Interface
Definition Language). Có nghĩa là các ngôn ngữ tơng thích COM có thể sử dụng
TK để thực hiện hoặc sử dụng các định nghĩa từ một file nguồn TK và các file
nguồn này phải đợc dịch bởi D$_TK(MIDL). Trình biên dịch của Microsoft
MIDL sinh ra một vài file nguồn kiểu C và C
++
Nh vậy, Tb"J cung cấp ba đặc tính cơ bản gồm: !F+2
G74<B+/*!Bf+$S+?. Các tính chất này
đạt đợc nhờ ba phơng thức:
Phơng thức P_ thực hiện tăng tổng số tham khảo đến đối tợng lên 1 khi
một giao diện hoặc một ứng dụng khác tự nó nối kết với đối tợng.
Phơng thức e!DTD_+ hỏi đối tợng về các đặc tả mà nó cung cấp thông
qua các con trỏ giao diện.
Phơng thức P+$ thực hiện giảm 1 tổng số tham khảo đến đối tợng, tổng số
bằng 0 có nghĩa là đối tợng đợc tự do.
Trong đó Tb"J;;P_ và Tb"J;;P+$ là hai phơng thức duy trì
tổng số tham khảo đến đối tợng, nó đợc dùng để quản lý thời gian tồn tại của đối t-
ợng. Ví dụ nếu tạo một đối tợng KD8+ thì tổng số tham khảo sẽ đợc tăng lên 1.
Mỗi khi một hàm trả về một con trỏ chỉ tới một giao diện cho đối tợng, thì hàm đó
phải thực hiện phơng thức P_ thông qua con trỏ để tăng tổng số tham khảo đến
23
đối tợng. Hai phơng thức P_ và P+$ phải tơng đồng với nhau, có nghĩa là
phải thực hiện phơng thức P+$ trớc khi có thể huỷ bỏ một con trỏ. Khi tổng số
tham khảo đến đối tợng bằng 0 có nghĩa là đối tợng đó đã bị hủy và tất cả các giao
diện liên quan đến nó trở nên không hợp lệ.
Tb"J;;e!DTD_+, phơng thức này dùng để điều hớng đối tợng, nó xác
định liệu một đối tợng thành phần có đợc hỗ trợ bởi một giao diện xác định hay
không, giao diện này đợc xác định bởi từ định danh TTK (Interface IDentifier) do
client đa đến. Nếu đối tợng hỗ trợ giao diện thì phơng thức e!DTD_+ sẽ trả về
một con trỏ chỉ tới giao diện đó, và sau đó có thể sử dụng các phơng thức của giao
diện để giao tiếp với đối tợng. Nếu e!DTD_+ thực hiện thành công trả về một
con trỏ chỉ tới giao diện nó sẽ kết thúc bởi gọi phơng thức P_ để tăng tổng số
tham khảo, cho nên ứng dụng phải gọi phơng thức P+$ để giảm tổng số tham
khảo trớc khi huỷ con trỏ chỉ tới giao diện .
Phiên bản của giao diện muốn chỉ ra rằng việc sửa đổi một giao diện đã đa ra là
rất tối kị, thậm chí sự thay đổi số lợng phơng thức trong giao diện cũng có thể gây ra
P+$!@
IUnknown
?.'
End Sub
Bên trong Visual Basic sẽ tự động thực hiện
AddRef
và
Release
để quản lý
tổng số tham khảo chuẩn và một đối tợng trong Visual Basic đợc duy trì chạy
nếu client vẫn nối đến nó.
Còn đối với phơng thức
QueryInterface
cũng bị Visual Basic ẩn mã, nó sẽ
đợc Visual Basic thầm lặng gọi đến khi ấn định một đối tợng vào một kiểu
tham khảo xác định.
Ví dụ:
Dim Dog As IDog
Set Dog = New CBeagle
' Để đến một giao diện khác:
Dim WonderDog As IWonderDog
Set WonderDog = Dog 'g/e!DTD_+?.'
WonderDog.FetchSlippers
25
Đặc điểm của giao diện:
Giao diện là một cách để thể hiện các thuộc tính và chức năng của đối tợng
thành phần, cần phân biệt những điểm sau:
Một giao diện không phải là một lớp: trong khi một lớp có khả năng cụ thể hoá
để hình thành lên một đối tợng thành phần thì một giao diện không thể tự nó để trở
thành đối tợng đợc, bởi vì nó bao gồm những thứ không thể thi hành trực tiếp. Ngoài