2010-10-29 3 views
6

ho bisogno di sviluppare alcune classi che dovrebbero essere richiamabile da VB6 con Managed C++ (C++/CLI).Generazione di un COM assembly visibile da Managed C++ (C++/CLI)

ho sviluppato dapprima un campione in C# e posso usare il montaggio passante COM senza problemi usando solo l'impostazione "Registra per interoperabilità COM" e "Make assembly COM visibile" (e che utilizzano l'attributo [ClassInterface (ClassInterfaceType .AutoDual)] per i metodi disponibili in VB6.

Dopo che ho cercato di tradurre il campione C++/CLI senza successo. ho creato la stessa classe con il [ClassInterface (ClassInterfaceType.AutoDual)] attributo. I abbiamo impostato l'impostazione "IDL incorporato" per specificare il TLB di uscita ma il TLB non viene generato automaticamente.Se io uso l'utilità tlbexp sulla DLL generata ottengo un tlb che può essere importato in VB6 ma quando provo a creare un'istanza Ottengo un "compoennt ActiveX non può creare oggetto (429)"

Che altro devo fare con il progetto di lasciarlo correre?

Grazie in anticipo.

risposta

6

Non c'è molto da andare avanti, ma non hai mai menzionato la registrazione del montaggio. L'IDE C++ non ha l'opzione "Registra per interoperabilità COM". Dal prompt dei comandi di Visual Studio, eseguire Regasm.exe sull'assieme per registrarlo. È necessario l'opzione/codebase se non si inserisce l'assembly nel GAC. E l'opzione/tlb genera la libreria dei tipi, rendendo inutile tlbexp.exe.

+0

Sto registrando l'assembly automaticamente con tlbexp, giusto? L'opzione/tlb viene segnalata come non riconosciuta dal compilatore e dal linker. Sei sicuro di questo? –

+0

No, tlbexp genera solo una libreria di tipi, nulla viene registrato. L'opzione/tlb è per Regasm.exe, non per il compilatore o il linker. Mi è molto difficile non averlo ricevuto dal mio post. –

+0

Deve esserci qualcosa in relazione con il fatto di essere un po 'in ritardo. Ho riletto il tuo post e sono perplesso quanto te :) –