Tôi đã viết một dự án .NET đơn giản (Thư viện lớp) là COM hiển thị. Nó hoạt động với VB6!Sử dụng ClassInterfaceType.AutoDual thực sự là một ý tưởng tồi, ngay cả với VB6?
Mã này trông giống như sau:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType::AutoDual)]
public ref class MyObject
{
// Some methods and values
}
Việc lắp ráp được ký chính xác (không yêu cầu nếu nó không nằm trong GAC) và đăng ký (regasm MyProject.dll /tlb /codebase
).
Sau đó, tệp TLB được tham chiếu trong dự án VB6 của tôi và tất cả đều OK! Tôi có thể truy cập vào các lớp học của tôi và các phương pháp công cộng bên trong chúng.
Trên Internet, nhiều người nói rằng việc sử dụng ClassInterfaceType::AutoDual
không phải là một ý tưởng hay, vì các vấn đề tiềm năng xảy ra với phiên bản có thể phá vỡ các ứng dụng sử dụng lắp ráp.
Nhưng, trong trường hợp của tôi, nó thực sự là một vấn đề? Hội đồng này chỉ được sử dụng trong các dự án VB6 (trong phần kết nối sớm).
Trong mỗi bản phát hành mới, tôi thực hiện lại các bước này (đã ký, đã đăng ký, v.v.). Nó có thể là bất kỳ vấn đề versioning với giải pháp này?
Dù sao, tôi có thể viết một số thuộc tính [GUID("...")]
không?
GUID được tạo tự động bởi Visual Studio, vì vậy các lớp không phải là GUID giống nhau ở mỗi lần biên dịch. Đúng không?
Cảm ơn bạn đã trả lời! Để làm rõ, trong dự án, các mục tiêu là: 1) Sử dụng Intellisense trong VB6 2) Sử dụng các đối tượng như thế này: 'Dim myobj As New MyObject'. Sau đó, giải pháp của tôi là tốt, phải không? –
Tôi đã đề cập đến điều đó trong câu trả lời của mình, tự động hoàn thành cũng giống như IntelliSense và bạn không muốn sử dụng GetObject. Rõ ràng bạn nhấn mạnh vào việc sử dụng AutoDual. –
Rất cám ơn! Tóm lại, nếu tôi gỡ bỏ cài đặt và cài đặt lại assembly đúng cách (với 'regasm'), thì chúng sẽ không có vấn đề gì với phiên bản ngay cả khi tôi sử dụng GUID tự động và AutoDual. Làm thế nào về DispID? –