J'ai une DLL .NET qui a quelques interfaces \ classes qui sont exposées à com. Au cours de la procédure de construction, un fichier .tlb est généré et cette tlb est référencée par du code C++. Par conséquent, le compilateur génère un fichier .tlh pour la tlb..tlh généré sur 2 machines est différent
Lorsque je lance la construction localement, l'une des propriétés de l'une des interfaces se termine par une méthode correspondante dans le tlh qui n'a pas le même nom. La propriété dans le code .net s'appelle PropertyA et s'appelle get_propertyA, tandis que PropertyB se termine par get_PropertyB. Je n'ai pas battu une paupière quand cela s'est produit, j'ai simplement utilisé la méthode telle que définie dans le tlh et supposé que tout était hunky dory, cependant quand j'ai coché ces changements, la construction ne fonctionnait pas pour quelqu'un d'autre, car le compilateur produisait get_PropertyA et get_PropertyB (discordance de cas de notification dans la propriété A).
Les fichiers tlb générés sur les deux machines sont identiques (d'après un comparateur) et les fichiers tlh sont générés par la même version du compilateur.
La procédure de construction crée le TLB en faisant: chemin regasm \ à \ dll \ Mydll.dll -tlb: path \ to \ output \ mydll.tlb
Toutes les idées pourquoi ma version locale se termine avec une propriété avec le nom incorrect? Ou ce que je peux faire pour le réparer? MISE À JOUR: J'ai lu que tlbexp utilisera la première version de la chaîne qu'il trouve et qui peut changer avec une recompilation. Bien que je n'utilise pas tlbexp, je me demandais si c'était le problème. J'ai trouvé des paramètres avec le même nom que ma méthode (dans d'autres méthodes) mais avec une lettre minuscule au début. Alors j'ai remplacé tous ceux-là. Reconstruit, pas de changement. SO j'ai alors renommé ma méthode COM. Re-Built et obtenu les erreurs de méthode manquantes attendues. Rebaptisé la méthode au nom d'origine, et hey presto il semblait fixe. Comme il semble maintenant fonctionner et je ne peux pas l'échouer à nouveau je ne peux pas essayer les solutions suggérées, mais j'aime l'idée de renommer au cas où cela se produirait dans le futur.
Faites attention lorsque vous utilisez la solution de contournement "renommer" - cela fonctionne comme une simple substitution de texte et peut parfois conduire à des résultats bizarres. J'ai mis à jour la réponse pour décrire cela. – sharptooth
merci pour les heads up. Je garderai cela à l'esprit si des problèmes surviennent. –