2010-09-13 41 views
60

Sự khác biệt thực sự giữa hai tùy chọn này là gì? Những gì tôi biết là:"Đăng ký COM Interop" vs "Hiển thị COM lắp ráp"

Đăng ký cho COM Interop
tùy chọn này thực thi regasm về lắp ráp và đăng ký lắp ráp như một thành phần COM (hoặc có thể không) trong registry với tất cả COM như các khóa registry. Bước này có tạo tệp TLB không? Còn gì nữa?

Thỉnh thoảng tôi thấy một tlb được tạo khi tôi biên dịch dự án nhưng đôi khi không, tại sao lại như vậy?

Thực hiện lắp ráp COM hiển thị
Hiệu ứng này có ảnh hưởng gì đến một hội đồng? Nếu tôi có các loại sau đây bên trong hội đồng này, tôi vẫn cần phải xác định "Hãy lắp ráp COM Visible" mặc dù loại của tôi được đánh dấu là ComVisible?

[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)] 
public interface IMyInterface 
{ 
} 

Trả lời

90

"Make lắp ráp COM có thể nhìn thấy" là một cái búa lớn để làm cho tất cả loại công trong việc lắp ráp [ComVisible]. Hiếm khi bạn muốn, bạn sẽ muốn chọn các loại cụ thể mà bạn muốn hiển thị, giống như bạn đã làm trong đoạn mã của mình.

Sau khi lắp ráp được xây dựng, nó cần phải được đăng ký để khách hàng COM có thể tìm thấy nó trở lại. Mà chỉ sử dụng một số để xác định các đối tượng mà ông muốn tạo ra, GUID, một tra cứu thêm là cần thiết để tìm hiểu những gì DLL thực hiện nó. Đăng ký bao gồm viết các khóa trong phần HKLM\Software\Classes\CLSID\{guid} của sổ đăng ký. Bạn có thể tự mình thực hiện bằng cách chạy Regasm.exe /codebase /tlb hoặc bạn có thể tự động làm việc đó lên hệ thống xây dựng để tự động thực hiện sau khi xây dựng cụm.

Đó là những gì "Đăng ký cho COM interop". Nó là mong muốn vì nó đảm bảo rằng các bản sao cũ của DLL được đăng ký tự động trước khi nó được ghi đè, ngăn chặn ô nhiễm registry. VS cần chạy cao để có quyền ghi vào các khóa registry đó, một lý do để làm cho nó trở thành tùy chọn. Hoặc bạn chỉ không muốn đăng ký nó, phổ biến trên máy chủ xây dựng. Tôi không thể nhận xét về lý do tại sao đôi khi bạn không nhận được .tlb mà không cần chẩn đoán thêm.

+1

+1. Tôi đoán một lý do nữa cho lý do tại sao nó là tùy chọn là bạn không luôn luôn cần phải đăng ký lắp ráp trên máy chủ xây dựng hàng ngày của bạn. Ví dụ, bạn trưng ra một assembly C# đến COM và tiêu thụ nó từ C++ thông qua chỉ thị '# import' rất vui khi sử dụng tệp .tlb. – sharptooth

+0

+1: Tôi nghĩ rằng "tất cả các loại trong assembly [ComVisible]" bạn có nghĩa là * tất cả các loại công cộng * bởi vì các loại công cộng là những gì tôi thấy trong TLB xuất khẩu. – A9S6

+0

Cảm ơn, nhận xét đã được hợp nhất vào câu trả lời. –

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