2010-01-15 22 views
14

Khi đăng ký lớp được quản lý cho COM Interop bằng tay, cần có một số khóa đăng ký nhất định. Ví dụKhóa 'Danh mục được triển khai' có cần thiết khi đăng ký thành phần Managed COM không?

HKEY_CLASSES_ROOT 
    CLSID\[My Cls Id] 
    InprocServer32 
    (Default) = "mscoree.dll" 
    Assembly = [My assembly name] 
    etc. 

tôi đã nhận thấy rằng khi VS đăng ký một thư viện cho COM Interop, nó cũng cho biết thêm một chìa khóa

HKEY_CLASSES_ROOT 
    CLSID\[My Cls Id] 
    Implemented Categories 
     {62C8FE65-4EBB-45e7-B440-6E39B2CDBF29} 

phím này là gì, và nó là hoàn toàn cần thiết? Theo như tôi có thể nói, cuộc sống diễn ra tốt đẹp mà không có nó, nhưng có lẽ tôi không gặp phải những hoàn cảnh cần thiết.

Trả lời

23

Đây là CATID, danh mục thành phần. Một máy chủ điều khiển có thể sử dụng nó để lọc các mục xuất hiện trong hộp công cụ, chỉ cung cấp các mục thực hiện một bộ giao diện dự kiến.

Bạn có thể xem danh sách các danh mục thành phần đã biết trong khóa đăng ký HKCR\Component Categories. Cái mà Regasm.exe sử dụng có nghĩa là "máy chủ COM này được cài đặt trong .NET". Đó là kinda hữu ích để biết từ một chương trình. NET không nên sử dụng một máy chủ COM được thực hiện trong một ngôn ngữ quản lý, nó nên sử dụng siêu dữ liệu trong hội đồng trực tiếp.

CATID không được ghi chép đầy đủ. Mà làm cho họ khá vô dụng, bạn sẽ hiếm khi gặp rắc rối nếu bạn chỉ đơn giản là bỏ qua chúng. Nếu một số nhà cung cấp máy chủ điều khiển yêu cầu bạn sử dụng CATID để làm cho máy chủ COM của bạn có thể sử dụng trong máy chủ lưu trữ của họ, họ sẽ cho bạn biết về điều đó một cách rõ ràng.

+0

Hans - cảm ơn câu trả lời hữu ích. Bạn có nghĩa là "một chương trình .NET không thể sử dụng máy chủ COM được triển khai bằng ngôn ngữ * un * được quản lý" thay vì "ngôn ngữ được quản lý"? Thông tin thêm về CATID tại http://msdn.microsoft.com/en-us/magazine/cc301432.aspx –

+0

@Simon: không, máy chủ COM thường được triển khai bằng ngôn ngữ không được quản lý. –

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