Tôi biết cách đăng ký dll nhưng tôi chưa bao giờ thực sự chắc chắn lý do tại sao tôi làm điều đó hoặc theo những điều kiện dll phải được đăng ký. Ai đó có thể giải thích hoặc chỉ cho tôi một số tài liệu?Việc đăng ký một DLL là gì?
Trả lời
Khi một DLL được đăng ký, điểm nhập phương thức DllRegisterServer
trong DLL của bạn được gọi. Tương tự, DllUnregisterServer
được gọi khi một DLL không được đăng ký.
Như đã trình bày trong this MSDN article:
chỉ thị một máy chủ trong quá trình để tạo các khóa registry của nó cho tất cả lớp hỗ trợ trong máy chủ module này. Nếu chức năng này không thành công, trạng thái đăng ký cho tất cả các lớp không xác định.
Đối với các DLL COM, bạn sẽ cần phải triển khai các phương thức điểm nhập DllRegisterServer
và DllUnregisterServer
của riêng bạn để đăng ký/hủy đăng ký phù hợp. Mã ví dụ cho DllRegisterServer
có thể được tìm thấy here.
Kết quả cuối cùng của việc đăng ký DLL là tất cả CLSID cho các thành phần trong DLL được đăng ký theo HKEY_CLASSES_ROOT\CLSID
. Điều này cho phép CoCreateInstance
tìm đúng máy chủ khi khởi tạo đối tượng COM từ một DLL hoặc ứng dụng khác.
DllUnregisterServer
sẽ làm ngược lại và xóa tất cả CLSID khỏi sổ đăng ký được đặt trong đó bằng DllRegisterServer
.
Thông tin chung khác về DllRegisterServer
có thể được tìm thấy here.
Phổ biến nhất được gọi là đăng ký DLL là khi nó triển khai đối tượng COM. regsvr32 đảm bảo rằng một thể hiện của đối tượng có thể được tạo ra. Ví dụ: VBScript sử dụng mới hoặc CreateObject(), việc đăng ký đảm bảo rằng COM biết những gì DLL để tải để thực hiện một thể hiện mới, cho dù theo tên hoặc CLSID.
Xem "the layman's explanation" để có tóm tắt ngắn gọn (rất).
Liên kết bị hỏng. Vui lòng cung cấp một thay thế. –
Xong. Cũng được lưu trữ dưới dạng https://web.archive.org/web/20170222094351/https://chewychong.wordpress.com/2004/08/23/layman-s-explanation-of-regscvs-regasm-regsvr32/ –
Chỉ cần xem mã nguồn của regsvr32.exe
Tôi đã ngạc nhiên khi biết rằng mã nguồn này thực sự có sẵn với Visual Studio: http://msdn.microsoft.com/en-us/library/ms177531.aspx –
Khi tôi tạo một ActiveX DLL trong VB6, tôi không phải triển khai DllRegisterServer. – CJ7