Khi bạn viết mã trong VB6, kết quả được biên dịch là thành phần COM. Các thành phần COM cung cấp các giao diện, coclasses, structs và enums, thường được mô tả bằng cách sử dụng thư viện kiểu COM. Tuy nhiên, để tiêu thụ thành phần COM đó trong .NET, bạn cần mô tả kiểu theo định dạng .NET hiểu - đó là, một assembly .NET (vì nó không thể làm việc trực tiếp với các thư viện kiểu). Do đó, một hội đồng interop chỉ là một thư viện kiểu COM "được chuyển đổi", theo nghĩa là nó chứa các mô tả về các giao diện, các cấu trúc vv tương ứng với cùng một thứ trong một thư viện kiểu.
(Ở trên là hơi đơn giản, như Interop Assembly không đã được sản xuất từ một thư viện kiểu - bạn có thể trao mã một nếu bạn muốn, ví dụ.)
Trái với những gì là thường nói, một lắp ráp interop không chứa bất kỳ mã thực thi nào, và nó không làm bất kỳ sự sắp xếp nào. Nó chỉ chứa các định nghĩa kiểu, và là nơi duy nhất mà nó có thể có các phương thức nằm trong các giao diện và các phương thức trong các giao diện không có thực hiện. Các cuộc gọi .NET đến các COM thực sự được thực hiện bởi chính CLR dựa trên các mô tả kiểu được nạp từ các hội đồng interop - nó tạo ra tất cả các mã cần thiết khi đang bay.
Bây giờ là câu hỏi của bạn. Bạn cần phải đăng ký dự án COM DLL (đầu ra của VB6) của bạn - ví dụ, sử dụng regsvr32.exe
. Bạn không nên (trong thực tế, bạn không thể) đăng ký một hội đồng interop theo cách đó, bởi vì nó không phải là một thành phần COM - nó chỉ là một đồng bằng. NET lắp ráp, vì vậy bạn có thể đặt nó trong cùng một thư mục với .exe/.dll của bạn hoặc đặt nó vào GAC, như thường lệ.
Nguồn
2009-11-04 00:12:07
+1 Tôi nghĩ đó là một câu hỏi hay ngay cả khi không ai khác bỏ phiếu cho bạn. :) – Dusty