Hệ điều hành Windows sẽ tìm file DLL trong các thư mục sau:

Một phần của tài liệu Bài giảng lập trình C trên Windows - các khái niệm cơ bản (Trang 38)

các thư mục sau:

ƒ Nơi chứa chương trình ứng dụng gọi DLL

ƒ Thư mục hiện hành

ƒ Thư mục system, system32

ƒ Thư mục Windows

ƒ Các thư mục được liệt kê trong biến môi trường PATH

Cách thức gọi DLL trong ứng dụng – Load-time  Ứng dụng sẽ gọi hàm export của DLL một cách “tường minh” (giống như cách gọi hàm của thư

viện liên kết tĩnh)  Ứng dụng cần phải liên kết với file thư viện nhập (Import Lib) của DLL  Ứng dụng sẽ nạp DLL ngay thời điểm đầu tiên chương trình chạy  Ưu đim: ƒ Đơn giản, dễsửdụng vì giống như cách dùng thư viện tĩnh  Khuyết đim: ƒ Nếu không tìm ra DLL lúc nạp, ứng dụng sẽkết thúc ngay

Spring 2004

C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM 31

Cách thức gọi DLL trong ứng dụng – Load-time…(tt)

 Cách làm:

ƒ Add file thư viện nhập (DllName.lib) vào project

ƒ Khai báo các hàm, biến IMPORT từ DLL

ƒ Gọi hàm của thư viện DLL như gọi hàm bình thường Cách thức gọi DLL trong ứng dụng – Run-time  Cách làm: ƒ Ứng dụng sẽdùng hàm LoadLibrary hay LoadLibraryEx để nạp DLL tại thời điểm cần thiết

ƒ Sau khi DLL được nạp, ứng dụng sẽdùng hàm

GetProcAddress để lấy địa chỉ của hàm export trong DLL

ƒ Ứng dụng sẽgọi hàm export trong DLL bằng cách dùng con trỏhàm trả về từ hàm

GetProcAddress

Spring 2004

C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM 33

Cách thức gọi DLL trong ứng dụng – Run-time…(tt)  Ưu điểm: ƒ Có thểxử lý lỗi không tìm thấy DLL, tránh kết thúc ứng dụng tức thời, thể hiện thông báo lỗi do ứng dụng qui định Cách thức gọi DLL trong ứng dụng – Run-time…(tt)  Ví dụ: gọi hàm myFunc(LPTSTR)từ thư viện MYDLL.DLL // Định nghĩa Prototype của hàm typedef VOID (*MYPROC)(LPTSTR); HINSTANCE hinstLib;

MYPROC ProcAddr;

// Nạp DLL và lấy handle của DLL module hinstLib = LoadLibrary(“MYDLL");

// Nếu load thành công, lấy địa chỉ của hàm myFunc // trong DLL

if (hinstLib != NULL) {

ProcAddr = (MYPROC) GetProcAddress(hinstLib, "myFunc"); // Nếu lấy được địa chỉ hàm, gọi thực hiện hàm if (ProcAddr != NULL)

(ProcAddr) (“A parameter string \n"); // Giải phóng thư viện DLL

Spring 2004

C4W - DLL - Nguyen Tri Tuan - DH.KHTN Tp.HCM 35

Lập trình C trên Windows

Một phần của tài liệu Bài giảng lập trình C trên Windows - các khái niệm cơ bản (Trang 38)

Tải bản đầy đủ (PDF)

(192 trang)