1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình Windows - Chương 9: Lập trình thư viện động (2016)

9 8 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 180,97 KB

Nội dung

Bài giảng Lập trình Windows - Chương 9: Lập trình thư viện động cung cấp cho người học các kiến thức: Giới thiệu thư viện động - DLL; giao diện thư viện DLL, các bước lập trình DLL, sử dụng DLL trong chương trình. Mời các bạn cùng tham khảo nội dung chi tiết.

Chương Lập trình thư viện động 9.1 Giới thiệu thư viện động - DLL Thư viện tập đại lượng, hàm cung cấp cho việc thực cơng việc cho chương trình ứng dụng  Thư viện tĩnh (static library) lập trình, dịch liên kết với chương trình sử dụng Dẫn đến chương trình lớn lưu trữ, chiếm tài nguyên nhiều chạy,  Thư viện động (DLL) cho phép phép chương trình sử dụng lưu trữ độc lập với nó, chạy cần đến nạp vào máy Nhằm mục đích giảm tải cho hệ thống chạy ứng dụng  Minh họa thư viện động:  Chương compile trình ứng dụng Chạy chương trình ứng dụng EXE EXE Thư viện compile động DLL DLL 9.1 Giới thiệu thư viện động – DLL Thư viện động có chế làm việc: kiểu loadtime thư viện nạp vào máy với chương trình chạy, kiểu runtime thư viện nạp vào máy chương trình cần, dùng xong giải phóng khỏi máy  Minh họa 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 9.2 Giao diện thư viện DLL Giao diện thư viện (interface) kiểu, đại lượng, hàm cung cấp cho chương trình ứng dụng, cầu nối ứng dụng với bên thư viện  Minh họa sau:  DLL interface using using Chương trình ứng dụng using Chương trình khơng sử dụng thành phần khơng có giao diện, có thư viện 9.3 Các kiểu thư viện DLL Có hai kiểu thư viện động tạo lập trình MFC - DLL mở rộng MFC - DLL thông thường  Đối với thư viện DLL mở rộng MFC giao diện chứa thành phần C++ MFC tất nhiên sử dụng C++ MFC để lập trình tạo DLL Chương trình liên kết tương ứng phải có phiên với thư viện MFC DLL  Thư viện DLL thơng thường lập trình thành phần từ đầu, nhiên dùng thành phần ngôn ngữ hệ thông API, lệnh bản,  DLL mở rộng từ MFC DLL thơng thường DLL3 MFC DLL1 DLL có sử dụng MFC DLL2 9.4 Các bước lập trình DLL Project DLL kiểu [Win32 Dynamic-Link Library], tạo VC, tổ chức thành tệp *.CPP *.DEF  Các bước lập trình DLL  Bước 1: Lập trình hàm, lớp, đối tượng, thư viện Lập tệp *.CPP Bước 2: Lập trình giao diện cho thư viện, tệp *.DEF, thực trực tiếp tệp *.CPP  Định nghĩa giao diện qua tệp *.DEF LIBRARY " tên thư viện " DESCRIPTION ' mô tả thư viện ' EXPORTS entryname [=internalname] [@ordinal[NONAME]]  Định nghĩa giao diện trực tiếp 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 viết bình thường Chú ý: Phải đặt Project theo chế độ DLL thay /subsystem:windows /dll mục Link Setting 9.5 Sử dụng DLL 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) không tường minh (implicite)  Liên kết không tường minh  Bước 1: Bạn phải chép hai tệp thư viện động DLL LIB vào thư mục chương trình để thực liên kết Bước 2: Bạn thiết lập cho chương trình bạn có thêm liên kết với thư viện DLL cách chọn chức "Project"  "Setting"  Chọn thẻ "Link" hộp thoại gõ vào ô "Object/Library modules" tên tệp LIB thư viện động tương ứng Bước 3: Trong chương trình bạn phải khai báo nhận thành phần có sử dụng từ giao diện thư viện động cú pháp sau: declspec(dllimport) khai-báo-thành-phần; Chúng ta thấy khai báo tương tự khai báo giao diện cho thư viện động sử dụng từ khóa dllimport thay cho dllexport Bước 4: Bạn dùng thành phần khai báo bình thường chương trình  Các liên kết áp dụng cho kiểu giao diện định nghĩa trực tiếp *.cpp 9.5 Sử dụng DLL 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 lưu giữ số hiệu module tương ứng với thư viện nạp Mẫu hàm: HMODULE LoadLibrary( LPCTSTR filename ); Bước 2: Gọi hàm GetProcAddress() để xác định địa hàm, địa biến nhớ, thư viện sau nạp, địa hàm lưu trỏ hàm dùng để gọi hàm FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName ); Hàm trả kiểu 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 trỏ lưu địa hàm cần sử dụng chương trình Nếu hàm callback 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 sử dụng xong hàm thư viện Mẫu hàm sau: BOOL AFXAPI FreeLibrary( HMODULE hInstLib ); 9.5 Sử dụng DLL chương trình  Khai báo thành viên xuất DLL (không cần tệp DEF) sau: #define DllExport declspec( dllexport ) class DllExport khai báo thành phần cần xuất; Ví dụ: class DllExport C { virtual 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] Setting Project  Khai báo thành phần thư viện để sử dụng chương trình:  #define DllImport declspec( dllimport ) Ví dụ: class DllImport C { virtual int func( void ); }; DllImport int x; DllImport void sum( int x, int y); ... 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 9.2 Giao diện thư viện DLL Giao diện thư viện (interface) kiểu, đại lượng, hàm cung cấp cho chương. .. ứng dụng  Minh họa thư viện động:  Chương compile trình ứng dụng Chạy chương trình ứng dụng EXE EXE Thư viện compile động DLL DLL 9.1 Giới thiệu thư viện động – DLL Thư viện động có chế làm việc:... loadtime thư viện nạp vào máy với chương trình chạy, kiểu runtime thư viện nạp vào máy chương trình cần, dùng xong giải phóng khỏi máy  Minh họa sau:  Chương trình DLL-1 DLL-2 DLL-1 DLL-3 RunTime

Ngày đăng: 08/05/2021, 14:05