Dynamic link library
Lập trình Windows
Các kĩ thuật
Tạo dll từ C# & dùng trong cùng solution của C#
Tạo dll từ C#, nạp động khi chạy từ C#
Kĩ thuật plugin
Tạo dll từ C++, nạp lên dùng bởi C#
Tạo dll từ C#, nạp lên dùng bởi C++
2
DLL chứa được gì?
Hàm, lớp
Tài nguyên: hình ảnh, tập tin, âm thanh, con trỏ…
Để lấy tài nguyên lúc runtime, dùng hàm
Assembly.GetManifestResourceStream
3
Tạo DLL trong cùng solution
Tạo project dạng Class Library bên trong solution
Trong project cha, thêm tham chiếu
Nhấn chuột phải > Add Reference
Trong tab project, chọn tên project dll đã tạo
Sử dụng hàm của lớp trong dll cần thêm khai báo
Using
http://
www.mindstick.com/Articles/9d1f70d0-efab-4e56-a511-18
92020e7a95
4
Tạo DLL riêng và nạp
Phải được đặt cùng với tập tin exe
Nạp vào bộ nhớ từ đường dẫn Assembly.LoadFile()
Lấy ra lớp tương ứng muốn dùng GetType(“Ten”)
Tạo ra thể hiện: Activator.CreateInstance()
Gọi hàm sử dụng Reflection
Gọi hàm sử dụng dynamic (.Net 4.0)
5
Tạo plugin
6
Các bước
Tạo một dll khai báo interface
Tạo các dll khác kế thừa từ interface trên
Hiện thực hóa theo nghiệp vụ tương ứng riêng
Khi chạy, nạp các dll này
7
Demo
Chương trình tính tốn với 2 số.
Mặc định chương trình làm được phép cộng
Khi scan thì sẽ thêm vào hai khả năng mới là phép
trừ và phép nhân
8
Bài tập
Viết chương trình chơi Búa Kéo Bao với 3 AI
AI mặc định đi kèm tập tin exe: random
2 AI trong 2 DLL, khi được scan thì mới hiện ra
AI ăn gian: luôn luôn thắng
AI nịnh bợ: ln ln thua
Viết chương trình vẽ với khả năng vẽ 3 hình
Hình mặc định đi kèm là đường thẳng
2 hình kế tiếp là hình vng và hình tròn được đặt trong 2 DLL, khi
scan mới thấy
Cài đặt sao cho nhập đúng mật khẩu thì mới nạp được 2 DLL này
9
Mở rộng – Tự tìm hiểu
10
Gọi Win32 API: P/Invoke
Calling Win32 DLLs in C# with P/Invoke
/>
Giả sử ta muốn gọi hàm MessageBeep trong user32.dll có
nguyên mẫu như sau:
BOOL MessageBeep( UINT uType /* beep type */);
Khai báo ánh xạ trong C#:
[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);
Sau đó gọi hàm như bình thường
11
Tạo C++ DLL và gọi từ C#
http://
www.codeproject.com/Articles/9826/How-to-create
-a-DLL-library-in-C-and-then-use-it-w
12
Late binding C++ DLL
http://
www.codeproject.com/Articles/1557/Late-bindingon-native-DLLs-with-C
13