2010-08-13 12 views

Trả lời

2

Về cơ bản, nó gọi vào dll của bạn (có tên filename.ax trong trường hợp này) và gọi phương thức "DllRegisterServer" của nó.

Trong trường hợp bộ lọc DirectShow, nó có thể "đăng ký" các bộ lọc đó trong sổ đăng ký cửa sổ để trình hướng dẫn trực tiếp biết về chúng.

ví dụ: https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L698 gọi https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L631

Mặc dù có các phiên bản đơn giản hơn ngoài kia.

+0

Cả hai liên kết github không còn hoạt động nữa - bạn có thể chỉnh sửa các ví dụ trong câu trả lời của mình không? – codingbadger

+1

đã sửa lỗi về điều đó – rogerdpack

0

regsvr32 đăng ký DLL và EXE vào Windows Registry (thường là thư viện kiểu COM, ID lớp, ID giao diện, v.v.). Bạn có thể sử dụng regedit để điều hướng registry.

+1

Nhưng cách hoạt động? Nó có ảnh hưởng gì? – wamp

29

COM được sử dụng rộng rãi trong Windows dựa trên đăng ký. Một thành phần sẽ cung cấp các thư viện kiểu, các giao diện và các lớp. Mỗi trong số này được định nghĩa bởi một GUID để đặt tên cho chúng. Thành phần COM cũng có thể định nghĩa ProgID là loại phím tắt cho GUID khó sử dụng.

Tất cả thông tin này được lưu trữ trong tổ chức đăng ký đặc biệt trên máy tính có tên HKEY_CLASSES_ROOT. Sử dụng RegEdit.exe để xem. Đặc biệt, bạn có thể tìm thấy thư viện kiểu trong HKEY_CLASSES_ROOT\TypeLib, giao diện trong HKEY_CLASSES_ROOT\Interface và các lớp học trong HKEY_CLASSES_ROOT\CLSID. Một số thông tin trong sổ đăng ký sẽ chứa đường dẫn của DLL thực sự với thành phần cho phép Windows định vị và tải thành phần khi nó được yêu cầu.

Khi bạn cài đặt thành phần COM, bạn cần tạo thông tin đăng ký chính xác. Theo quy ước các DLL có thể cung cấp hai chức năng xuất khẩu:

Khi bạn thực hiện RegSvr32.exe MyComponent.dll các RegSvr32.exe thực thi sẽ cố gắng gọi DllRegisterServer trong MyComponent.dll. DLL sau đó được cho là tạo tất cả các mục đăng ký cần thiết để cho phép thành phần được sử dụng.

Tương tự, bạn có thể sử dụng RegSvr32.exe /u MyComponent.dll để hủy đăng ký thành phần. Điều đó sẽ loại bỏ tất cả các thông tin trước đó được thêm vào sổ đăng ký.

Windows dựa nhiều vào COM và điều rất quan trọng là việc đăng ký COM được cập nhật. Thật không may là không có gì ngăn bạn xóa một thành phần COM đã được đăng ký. Điều này sẽ để lại con trỏ lơ lửng trong sổ đăng ký trỏ đến DLL không còn tồn tại nữa. Bạn thậm chí không thể hủy đăng ký vì nó không còn tồn tại nữa.

Một vấn đề khác là khi hai ứng dụng khác nhau yêu cầu các phiên bản khác nhau của cùng một thành phần. Sổ đăng ký chỉ có thể trỏ đến một trong hai phiên bản và điều này có thể khiến một trong các ứng dụng bị lỗi.

Microsoft đã tạo bản sửa lỗi cho những sự cố này. Nó là tốt hơn để cung cấp một trình cài đặt cho các thành phần COM có thể sửa chữa và gỡ bỏ cài đặt các thành phần nếu nó đã bị xóa. Bạn cũng có thể tạo cài đặt song song của cùng một thành phần trong các phiên bản khác nhau.

+0

Câu trả lời chất lượng rất cao, cảm ơn bạn – AFract