2013-04-02 20 views
5

devo rilasciare alcuni cambiamenti nella DLL selezionate (semplici cambiamenti interni ai metodi - nulla che rompe la compatibilità in base alle this)VB6 - rilasciando solo pochi DLL con la forte dipendenza senza rompere alcun riferimento

Così il generale Il metodo accettato è quello di mantenere le vecchie DLL in una directory condivisa separata e mentre si creano le nuove DLL, compilarle con la compatibilità binaria impostata sul vecchio set di DLL. Questo viene fatto per non modificare i GUID mentre registro le mie nuove DLL. Questi GUID sono utilizzati come riferimenti in altre DLL che non ho disturbato durante il rilascio.

Ora, quando provo a creare una qualsiasi delle nuove DLL, viene visualizzato un avviso: "La DLL di compatibilità binaria o EXE contiene un tipo di parametro o un tipo di restituzione la cui definizione non può essere trovata". Sono abbastanza sicuro di non aver aggiunto nulla per infrangere la regola di compatibilità binaria (nessuna modifica della firma, metodi pubblici, variabili, ecc.). Sono un noob non controllando qualcosa di base?

Scratching my head since morning. Ogni aiuto è molto apprezzato.

MODIFICA: Se non ci sono modifiche alla mia firma, c'è un modo che posso sapere senza il confronto del codice?

+1

È possibile che il codice abbia interrotto la compatibilità in precedenza. VB6 non avvisa quando si aggiunge un nuovo metodo o proprietà pubblica, ma le successive compilazioni creano diversi tipi di file, poiché la DLL di riferimento non contiene ancora questo nuovo metodo. (Sto spesso impostando la compatibilità di dll con la stessa dll). Penso (ma non ho avuto esperienza) che quel messaggio specifico (... la definizione non può essere trovata) può indicare qualche cambiamento nei riferimenti del progetto o hai disinstallato/non registrato qualche altro componente dal tuo sistema. – Arvo

+2

La destinazione di compatibilità binaria utilizza i tipi da typelib esterno (probabilmente un altro progetto VB6) che non è registrato correttamente sulla macchina di compilazione o è una nuova/vecchia versione incompatibile. – wqw

+0

@Arvo - Sì, è possibile che il codice si sia rotto prima. In tal caso, dovrebbero esserci almeno due tipi di libreria (una per la pausa e una per la successiva). Ma il mio registro contiene solo uno – maverick

risposta

2

Prendere le vecchie DLL e aggiungere un prefisso compat_.

In pratica, rinominare il file MyAppDataAccess.dll in compat_MyAppDataAccess.dll.

Ora vai alle proprietà della tua DLL ActiveX e imposta il progetto in modo che abbia compatibilità binaria con il nuovo compat_MyAppDataAccess.dll, come di seguito.

Ora basta creare la DLL e distribuirla.

Dovrebbe funzionare. Se, infatti, la compatibilità binaria verrebbe interrotta a seguito delle modifiche, verrà visualizzato un messaggio di avviso.

enter image description here

+0

Non sarebbe come fare riferimento alla stessa DLL a se stessa? Non sono sicuro che sia un buon modo per andare. Sembra spaventoso. Non dovrò registrarli entrambi? – maverick

+0

In sostanza, sì, ma perché sarebbe spaventoso? Non dovresti registrarli entrambi. Il 'compat_' è solo lì per fornire la compatibilità binaria - non devi distribuirlo. Ho un sacco di app VB6 che hanno un sacco di dipendenze della libreria e questo è l'unico modo per garantire che le librerie non rompano la compatibilità binaria. – AngryHacker

+0

Ok! Questo funziona. Ho creato una cartella separata per le mie DLL compatibili in una posizione condivisa. Accettare la risposta da quando ha risolto il mio problema. Grazie – maverick