Ho scritto un semplice progetto .NET (Libreria di classi) che è COM visibile. Funziona con VB6!L'utilizzo di ClassInterfaceType.AutoDual è davvero una cattiva idea, anche con VB6?
Il codice si presenta come segue:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType::AutoDual)]
public ref class MyObject
{
// Some methods and values
}
L'assemblea è correttamente firmato (non richiesto se non è in GAC) e registrato (regasm MyProject.dll /tlb /codebase
).
Quindi, il file TLB è referenziato nel mio progetto VB6 e tutto è OK! Potrei accedere alle mie lezioni e ai metodi pubblici al loro interno.
Su Internet, molte persone dicono che l'utilizzo di ClassInterfaceType::AutoDual
non è una buona idea, a causa di potenziali problemi con il controllo delle versioni che potrebbe interrompere le applicazioni che hanno utilizzato l'assembly.
Ma, nel mio caso, è davvero un problema? Questo assembly viene utilizzato solo nei progetti VB6 (in associazione anticipata).
In ogni nuova versione, eseguo il backup di questi passaggi (firmato, registrato e così via). Può essere un problema di versione con questa soluzione?
In ogni caso, posso scrivere alcuni attributi [GUID("...")]
?
I GUID vengono generati automaticamente da Visual Studio, pertanto le classi non sono lo stesso GUID in ciascuna compilazione. È giusto?
Grazie per la risposta! Per chiarire, nel progetto, gli obiettivi sono: 1) Usare Intellisense in VB6 2) Usa oggetti come questo: 'Dim myobj As New MyObject'. Allora la mia soluzione è buona, no? –
Ho già spiegato che nella mia risposta, il completamento automatico è la stessa cosa di IntelliSense e non si desidera utilizzare GetObject. Chiaramente ti ostini ad usare AutoDual. –
Mille grazie! In breve, se disinstallo e reinstallo correttamente l'assembly (con 'regasm'), non rappresentano alcun problema con il controllo delle versioni anche se ho usato GUID e AutoDual generati automaticamente. Che ne dici di DispID? –