Ho una DLL .NET che ha alcune interfacce \ classi che sono esposte a com. durante la procedura di compilazione viene generato un file .tlb e questo tlb viene fatto riferimento da qualche codice C++. Di conseguenza il compilatore genera un file .tlh per il tlb..tlh generato su 2 macchine è diverso
Quando eseguo il build localmente, una delle proprietà in una delle interfacce termina con un metodo corrispondente nel tlh che non ha lo stesso nome. La proprietà nel codice .net si chiama PropertyA finendo per essere chiamata get_propertyA, mentre PropertyB finisce con get_PropertyB. Non ho battuto ciglio quando questo è accaduto, ho solo usato il metodo come definito nel tlh e ho pensato che fosse tutto hunky dory, comunque quando ho apportato queste modifiche la build non ha funzionato per nessun altro, dato che il compilatore ha generato proprietà chiamate get_PropertyA e get_PropertyB (mancata corrispondenza tra maiuscole e minuscole nella proprietàA).
I file tlb generati su entrambe le macchine sono identici (in base a un confronto esadecimale) ei file tlh sono entrambi generati dalla stessa versione del compilatore.
La procedura di generazione crea il TLB facendo: regasm path \ to \ dll \ Mydll.dll -tlb: path \ to \ output \ mydll.tlb
Tutte le idee perché la mia versione locale finisce con una proprietà con il nome sbagliato? O cosa posso fare per risolverlo?
AGGIORNAMENTO: Ho letto che tlbexp userà la prima versione della stringa che trova e che può cambiare con una ricompilazione. Anche se non sto usando tlbexp, mi sono chiesto se fosse questo il problema. Ho trovato parametri con lo stesso nome del mio metodo (in altri metodi) ma con una lettera minuscola all'inizio. Così ho sostituito tutti quelli. Ricostruito, nessun cambiamento. Quindi ho rinominato il mio metodo COM. Ri-Costruito e ottenuto gli errori di metodo mancanti attesi. Ribattezzato il metodo con il nome originale, e presto è sembrato corretto. Visto che ora sembra funzionare e non riesco a far fallire di nuovo, non posso provare le soluzioni suggerite, ma mi piace l'idea di rinominare in caso ciò avvenga in futuro.
Prestare attenzione quando si utilizza la soluzione "rinominare" - funziona come una semplice sostituzione di testo e può portare a risultati strani a volte. Ho aggiornato la risposta per delineare questo. – sharptooth
grazie per l'heads up. Lo terrò a mente se emergono problemi. –