2009-03-06 40 views
51

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

40

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 DllRegisterServerDllUnregisterServer 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.

+0

Khi tôi tạo một ActiveX DLL trong VB6, tôi không phải triển khai DllRegisterServer. – CJ7

6

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).

+0

Liên kết bị hỏng. Vui lòng cung cấp một thay thế. –

+1

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/ –

2

Chỉ cần xem mã nguồn của regsvr32.exe

+4

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 –

Các vấn đề liên quan