Bài giảng Lập trình Windows: Chương 9 - Lập trình thư viện động
lượt xem 8
download
Nội dung của chương 9 Lập trình thư viện động trong bài giảng Lập trình Windows nhằm giới thiệu thư viện động - DLL. Thư viện là một tập các đại lượng, các hàm cung cấp cho việc thực hiện các công việc cho các chương trình ứng dụng. Thư viện tĩnh (static library) được lập trình, dịch và liên kết với chương trình sử dụng nó. Dẫn đến các chương trình rất lớn khi lưu trữ, chiếm tài nguyên nhiều khi chạy,...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình Windows: Chương 9 - Lập trình thư viện động
- Chương 9 Lập trình thư viện động 1
- 9.1. Giới thiệu thư viện động - DLL Thư viện là một tập các đại lượng, các hàm cung cấp cho việc thực hiện các công việc cho các chương trình ứng dụng. Thư viện tĩnh (static library) được lập trình, dịch và liên kết với chương trình sử dụng nó. Dẫn đến các chương trình rất lớn khi lưu trữ, chiếm tài nguyên nhiều khi chạy,... Thư viện động (DLL) cho phép phép một chương trình sử dụng được lưu trữ độc lập với nó, chỉ khi chạy cần đến mới nạp vào máy. Nhằm mục đích giảm tải cho hệ thống khi chạy các ứng dụng. Minh họa thư viện động: Chương compile Chạy chương trình ứng dụng trình ứng EXE dụng EXE DLL Thư viện compile DLL động 2
- 9.1. Giới thiệu thư viện động – DLL... Thư viện động có 2 cơ chế làm việc: kiểu loadtime thư viện sẽ được nạp vào máy cùng với chương trình khi chạy, kiểu runtime thư viện được nạp vào máy mỗi khi chương trình cần, dùng xong sẽ giải phóng nó khỏi máy. Minh họa như sau: Chương trình DLL-1 DLL-2 DLL-1 DLL-3 RunTime DLL-1 Chương trình DLL-1 DLL-2 DLL-2 DLL-1 DLL-3 DLL-3 LoadTime DLL-1, DLL-2, DLL-3, Chương trình 3
- 9.2. Giao diện thư viện DLL Giao diện thư viện (interface) là các kiểu, đại lượng, hàm cung cấp cho chương trình ứng dụng, nó là cầu nối giữa ứng dụng với bên trong thư viện. Minh họa như sau: DLL interface using using Chương trình ứng dụng using Chương trình không sử dụng được các thành phần này vì không có trên giao diện, mặc dù có trong thư viện. 4
- 9.3. Các kiểu thư viện DLL Có hai kiểu thư viện động có thể tạo trong lập trình MFC - DLL mở rộng MFC và - DLL thông thường. Đối với thư viện DLL mở rộng MFC thì các giao diện có thể chứa các thành phần trong C++ và MFC và tất nhiên có thể sử dụng C++ và MFC để lập trình tạo ra DLL. Chương trình liên kết tương ứng phải có cùng phiên bản với thư viện MFC của DLL. Thư viện DLL thông thường được lập trình các thành phần từ đầu, tuy nhiên có thể dùng các thành phần cơ bản của ngôn ngữ và hệ thông như API, lệnh cơ bản,... DLL mở DLL thông rộng từ thường MFC DLL3 DLL1 DLL có sử MFC dụng MFC DLL2 5
- 9.4. Các bước lập trình DLL Project DLL kiểu [Win32 Dynamic-Link Library], tạo bằng VC, được tổ chức thành các tệp chính là *.CPP và *.DEF Các bước chính lập trình DLL Bước 1: Lập trình các hàm, lớp, đối tượng,... trong thư viện. Lập trong tệp *.CPP. Bước 2: Lập trình giao diện cho thư viện, trong tệp *.DEF, hoặc thực hiện trực tiếp trong tệp *.CPP. Định nghĩa giao diện qua tệp *.DEF LIBRARY " tên của thư viện " DESCRIPTION ' mô tả thư viện ' EXPORTS entryname [=internalname] [@ordinal[NONAME]] Định nghĩa giao diện trực tiếp trong môđun *.cpp __declspec(dllexport) khai-báo-thành-phần; class __declspec(dllexport) khai-báo-lớp; Các tệp tin chương trình cho DLL được viết bình thường Chú ý: Phải đặt Project theo chế độ DLL là thay /subsystem:windows bằng /dll trong mục Link của Setting. 6
- 9.5. Sử dụng DLL trong chương trình Có hai cách liên kết chương trình với thư viện DLL, tường minh (explicite) và không tường minh (implicite). Liên kết không tường minh Bước 1: Bạn phải chép cả hai tệp của thư viện động là .DLL và .LIB vào thư mục của chương trình để thực hiện liên kết. Bước 2: Bạn thiết lập cho chương trình của bạn có thêm liên kết với thư viện DLL bằng cách chọn chức năng "Project" "Setting" Chọn thẻ "Link" trên hộp thoại này và gõ vào ô "Object/Library modules" tên tệp .LIB của thư viện động tương ứng. Bước 3: Trong chương trình bạn phải khai báo nhận các thành phần có sử dụng từ giao diện của thư viện động bằng cú pháp sau: __declspec(dllimport) khai-báo-thành-phần; Chúng ta thấy khai báo này tương tự như khai báo giao diện cho thư viện động nhưng ở đây sử dụng từ khóa dllimport thay cho dllexport. Bước 4: Bạn có thể dùng các thành phần đã khai báo như bình thường trong chương trình. Các liên kết này áp dụng cho kiểu giao diện định nghĩa trực tiếp trong *.cpp 7
- 9.5. Sử dụng DLL trong chương trình... Liên kết tường minh Bước 1: Gọi hàm LoadLibrary() để nạp thư viện DLL vào máy và lưu giữ số hiệu của module tương ứng với thư viện được nạp. Mẫu hàm: HMODULE LoadLibrary( LPCTSTR filename ); Bước 2: Gọi hàm GetProcAddress() để xác định địa chỉ của một hàm, địa chỉ của biến nhớ,... trong thư viện sau khi được nạp, địa chỉ hàm này được lưu bởi con trỏ hàm và dùng để gọi hàm. FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName ); Hàm trả về kiểu con trỏ hàm tương ứng với tên hàm. typedef kiểu-hàm ( *kiểu-con-trỏ)( các-kiểu-tham-số); Sau đó dùng kiểu-con-trỏ để khai báo các con trỏ lưu địa chỉ hàm cần sử dụng trong chương trình. Nếu hàm callback thì có khai báo sau: typedef kiểu-hàm ( CALLBACK *kiểu-con-trỏ)( các-kiểu-tham-số); Bước 3: Gọi hàm FreeLibrary() sau khi đã sử dụng xong các hàm trong thư viện. Mẫu hàm như sau: BOOL AFXAPI FreeLibrary( HMODULE hInstLib ); 8
- 9.5. Sử dụng DLL trong chương trình... Khai báo các thành viên xuất ra của DLL (không cần tệp DEF) như sau: #define DllExport __declspec( dllexport ) class DllExport khai báo thành phần cần xuất; Ví dụ: class DllExport C { v irtual int func( void ) { return 1; } }; DllExport int x=10; DllExport void sum( int x, int y) { return x+y; } Đặt tên tệp thư viện (*.LIB) vào mục [Object Library] của Setting Project. Khai báo thành phần của thư viện để sử dụng trong chương trình: #define DllImport __declspec( dllimport ) Ví dụ: class DllImport C { v irtual int func( void ); }; DllImport int x; DllImport void sum( int x, int y); 9
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình Windows: Chương 2 - Lập trình với cửa sổ bằng API
10 p | 137 | 13
-
Bài giảng Lập trình Windows - Chương 3: Lập trình C++ trên Windows (2016)
16 p | 78 | 8
-
Bài giảng Lập trình Windows - Chương 2: Lập trình với cửa sổ bằng API (2016)
10 p | 86 | 8
-
Bài giảng Lập trình Windows - Chương 1: Tổng quan lập trình Windows (2016)
6 p | 153 | 8
-
Bài giảng Lập trình Windows: Chương 3 - Lập trình C ++ trên Windows
16 p | 86 | 7
-
Bài giảng Lập trình Windows: Chương 7 - Kiến trúc Document / View
13 p | 89 | 6
-
Bài giảng Lập trình Windows Phone (Module 4): Bài 8 - Trần Duy Thanh
15 p | 87 | 6
-
Bài giảng Lập trình Windows - Chương 8: Lập trình đa luồng (2016)
9 p | 88 | 6
-
Bài giảng Lập trình Windows - Chương 9: Lập trình thư viện động (2016)
9 p | 78 | 5
-
Bài giảng Lập trình Windows - Chương 6: Lập trình File & Print (2016)
7 p | 75 | 5
-
Bài giảng Lập trình Windows - Chương 5: Lập trình tài nguyên (2016)
16 p | 75 | 5
-
Bài giảng Lập trình Windows - Chương 4: Xử lý đồ họa và văn bản (2016)
13 p | 77 | 5
-
Bài giảng Lập trình Windows - Chương 7: Kiến trúc Document/View (2016)
13 p | 59 | 4
-
Bài giảng Lập trình Windows: Chương 6 - Lập trình File và Print
7 p | 69 | 4
-
Bài giảng Lập trình Windows - Chương 10: Lập trình Hook (2016)
6 p | 62 | 4
-
Bài giảng Lập trình Windows: Chương 5 - Lập trình tài nguyên
16 p | 78 | 3
-
Bài giảng Lập trình Windows: Chương 0 - Lý Anh Tuấn
8 p | 20 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn