Tôi luôn tham khảo các tệp DLL trong mã C # của mình, nhưng chúng vẫn còn là một bí ẩn mà tôi muốn làm rõ. Đây là một loại câu hỏi dồn dập liên quan đến DLL.
Tôi hiểu DLL là một thư viện được liên kết động có nghĩa là một chương trình khác có thể truy cập thư viện này tại thời điểm chạy để có được "chức năng". Tuy nhiên, hãy xem xét dự án ASP.NET sau với Web.dll
và Business.dll
( Web.dll
là chức năng giao diện người dùng và nó tham chiếu Business.dll
cho các kiểu và phương thức).
Tại thời điểm những gì
Web.dll
tự động liên kết đếnBusiness.dll
? Bạn nhận thấy rất nhiều lỗi trong Windows HDD cho các tác vụ dường như nhỏ khi sử dụng Word (v.v.) và tôi nghĩ rằng Word đang tắt và liên kết động trong chức năng từ các DLL khác?1a. Ngoài ra, những gì tải và liên kết DLL - hệ điều hành hoặc một số khung thời gian chạy như .NET framework?
1b. Quá trình "liên kết" là gì? Kiểm tra tính tương thích có được thực hiện không? Đang tải vào cùng một bộ nhớ? Liên kết thực sự có nghĩa là gì?
Điều gì thực sự thực thi mã trong DLL? Nó có được thực thi bởi bộ xử lý hay có một giai đoạn dịch hoặc biên dịch khác trước khi bộ xử lý hiểu mã bên trong DLL không?
2a. Trong trường hợp một DLL được xây dựng trong C # .NET, cái gì đang chạy: .NET framework hay trực tiếp hệ điều hành?
DLL từ Linux có hoạt động trên hệ thống Windows (nếu điều đó tồn tại) hay chúng là hệ điều hành cụ thể?
Các DLL có cụ thể cho một khuôn khổ cụ thể không? Một DLL được xây dựng bằng C # .NET có thể được sử dụng bởi DLL được xây dựng với, chẳng hạn như Borland C ++ không?
4a. Nếu câu trả lời cho 4 là "không" thì điểm của một DLL là gì? Tại sao các khung công tác khác nhau không sử dụng các định dạng riêng của chúng cho các tệp được liên kết? Ví dụ: .exe được tích hợp trong .NET biết rằng loại tệp .abc là thứ mà nó có thể liên kết vào mã của nó.
Trở lại với
Web.dll
/Business.dll
Ví dụ - để có được một kiểu lớp của khách hàng tôi cần phải tham khảoBusiness.dll
từWeb.dll
. Điều này phải có nghĩa làBusiness.dll
chứa một số loại đặc điểm kỹ thuật về lớp khách hàng thực sự là gì. Nếu tôi đã biên dịchBusiness.dll
tệp của mình trong, chẳng hạn như Delphi: liệu C # có hiểu nó và có thể tạo một lớp khách hàng không, hoặc có một số loại thông tin tiêu đề hoặc một cái gì đó có nội dung "xin lỗi, bạn chỉ có thể sử dụng tôi từ Delphi DLL khác" ?5a. Áp dụng tương tự cho các phương pháp; tôi có thể viết một
CreateInvoice()
phương thức trong DLL, biên dịch nó bằng C ++, sau đó truy cập và chạy nó từ C # không? Điều gì ngăn cản hoặc cho phép tôi làm điều này?Về chủ đề chiếm quyền điều khiển DLL, chắc chắn DLL thay thế (xấu) phải chứa các chữ ký và kiểu phương thức chính xác như kiểu và chữ ký phương thức đang bị tấn công. Tôi cho rằng điều này sẽ không khó thực hiện nếu bạn có thể tìm ra những phương pháp có sẵn trong DLL gốc.
6a. Điều gì trong chương trình C # của tôi đang quyết định xem tôi có thể truy cập vào một DLL khác không? Nếu DLL bị tấn công của tôi chứa chính xác các phương thức và kiểu như bản gốc nhưng nó được biên dịch bằng ngôn ngữ khác, thì nó có hoạt động không?
Nhập DLL và đăng ký DLL là gì?