Napisałem prosty projekt .NET (Class Library), który jest widoczny COM. Działa z VB6!Korzystanie z ClassInterfaceType.AutoDual jest naprawdę zły pomysł, nawet z VB6?
Kod wygląda następujące:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType::AutoDual)]
public ref class MyObject
{
// Some methods and values
}
Zespół jest prawidłowo podpisany (nie jest wymagany, jeśli nie jest w GAC) i zarejestrowany (regasm MyProject.dll /tlb /codebase
).
Następnie plik TLB jest przywoływany w moim projekcie VB6 i wszystko jest OK! Miałem dostęp do moich zajęć i dostępnych w nich metod publicznych.
W Internecie wiele osób twierdzi, że używanie ClassInterfaceType::AutoDual
nie jest dobrym pomysłem, z powodu potencjalnych problemów z wersjonowaniem, które mogą przerwać aplikacje, które używały zespołu.
Ale, w moim przypadku, czy to naprawdę problem? Ten zestaw jest używany tylko w projektach VB6 (we wczesnym wiązaniu).
W każdym nowym wydaniu wykonuję te same czynności (podpisane, zarejestrowane itd.). Czy to rozwiązanie może być problemem z wersjami?
W każdym razie, czy mogę napisać jakieś atrybuty [GUID("...")]
?
Identyfikatory GUID są generowane automatycznie przez program Visual Studio, więc klasy nie są tym samym identyfikatorem GUID w każdej kompilacji. Czy to jest poprawne?
Dzięki za odpowiedź! Aby wyjaśnić, w projekcie, cele są następujące: 1) Używanie IntelliSense w VB6 2) Użyj obiektów takich jak to: 'Dim myobj jako New MyObject'. Wtedy moje rozwiązanie jest dobre, nie? –
Już to omówiłem, autouzupełnianie to to samo, co IntelliSense i nie chcesz używać GetObject. Oczywiście nalegasz na używanie AutoDual. –
Wielkie dzięki! W skrócie, jeśli poprawnie odinstaluję i ponownie zainstaluję zespół (z 'regasm'), to nie będzie problemu z wersjonowaniem, nawet jeśli użyłem automatycznie wygenerowanego identyfikatora GUID i AutoDual. Co powiesz na DispID? –