Lập trình Windows Slide về thư viện động DLL. 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++
Trang 1Dynamic link library
Lập trình Windows
Trang 2Cá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
Trang 3DLL 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
Trang 4Tạ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://
Trang 5
Tạo DLL riêng và nạp
Assembly.LoadFile()
GetType(“Ten”)
5
Trang 6Tạo plugin
6
Trang 7Cá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
Trang 8 Chương trình tính toá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
Trang 9Bà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ợ: luôn luôn 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 vuông 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
Trang 10Mở rộng – Tự tìm hiểu
10
Trang 11Gọi Win32 API: P/Invoke
Calling Win32 DLLs in C# with P/Invoke
http://msdn.microsoft.com/en-us/magazine/cc164123.aspx
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
Trang 12Tạ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
Trang 13Late binding C++ DLL
http://
www.codeproject.com/Articles/1557/Late-bin ding-on-native-DLLs-with-C
13