2011-11-17 17 views
6

quindi la mia domanda è relativamente semplice, posso creare un'applicazione VB6 che fa riferimento a una classe in una DLL e quindi sostituire quella DLL con un'altra in fase di runtime?Creare un'applicazione VB6 utilizzando una classe in una DLL, quindi sostituire quella DLL dopo la generazione?

Ora la mia ipotesi iniziale è ... nessuna possibilità in VB6.

Quindi i miei pensieri si sono trasformati in una DLL di interoperabilità VB.net. Potrei farlo qui e quindi chiamare la DLL di interoperabilità dal VB?

Ancora una volta, la mia ipotesi sarebbe no .... ma sarei felice se qualcuno lo sapesse in modo diverso.

L'unica cosa che a mio avviso funzionerebbe sarebbe DI in .Net, ma sono limitato a .net 2 o 3.5 a una grande spinta, quindi non so se è possibile.

Così, per lo sfondo ....

Ho una DLL che utilizza un sito specifico, ma noi non vogliamo spedire quello fuori a tutti. Invece, vogliamo costruire una dll clone che abbia solo l'installazione delle interfacce in modo da completare la compilazione VB6. Quando arriva al sito che ne ha bisogno, vogliono sostituire la dummy dll e rilasciare invece la loro versione.

Nota: Usiamo RegFreeCOM quando viene installato, quindi ho i file manifest con cui posso giocare se necessario.

Qualsiasi idea sarebbe molto apprezzata.

Nick

+1

Potrebbe utilizzare late-binding in VB6 invece di un hard riferimento al dll? –

+1

Puoi testare questo in circa 10 minuti. Crea un progetto dll, metti una classe con un metodo che restituisce una stringa, codificalo per restituire "abc". scrivere un cablaggio di prova, aggiungere un riferimento, chiamare il metodo e mostrarlo. Ora scrivi un'altra DLL in un nuovo progetto. Stesso nome della classe, stesso nome del metodo, return "def". Copiare la DLL sul primo nella cartella del cablaggio di test ed eseguire il cablaggio di test. Penso che vedrai la nuova stringa, ma i test stanno credendo. Lo farei se avessi VB6 su questa macchina, probabilmente più veloce di digitare il commento. –

+1

Questo è uno dei motivi fondamentali per avere codice in una DLL anziché nell'applicazione (il riutilizzo/condivisione del codice è un altro) –

risposta

8

sua una dll COM quindi non è staticamente legata alla exe VB6, fintanto che i CLSID e gli ID di interfaccia sono gli stessi nella libreria tipo per entrambe le DLL, è possibile scambiarli in giro come si vede in forma. (Se è una VB6 dll questo è banale da fare con l'opzione di compilazione 'compatibilità binaria')

+0

Grazie Alex. Una delle mie difficoltà era come forzare il CLSID e il TLBID ad essere identici, e la compatibilità binaria lo ha fatto per me. – Nick

1

Si potrebbe anche usare l'associazione tardiva e invece di fare un riferimento direttamente nel codice VB6, si creerebbe un oggetto e quindi imposta quell'oggetto su un'istanza. Esempi e informazioni:

MVPS

Microsoft