Tlbexp.exe change le cas de noms de méthode
Question
J'ai un problème assez étrange. J'exporte une interface d'une bibliothèque C # COM. J'ai activé le paramètre du projet « registre avec COM », il Tlbexp.exe appelle à faire les libs de type.
Nous utilisons cas de chameau sur nos noms de méthode et je remarque que la bibliothèque de type exporté change ces toute méthode qui arrive à coïncider avec un nom de classe affaire Pascal ...
par exemple
interface IFoo
{
void randomClass()
}
class RandomClass
{
}
Le exporté IFoo dans le type lib définit IFoo-> RandomClass () au lieu de IFoo-> randomClass ()
Toutes les idées sur ce qui cause cela et comment l'arrêter?
La solution
Comme COM est insensible à la casse, à la fois « RandomClass » et « randomClass » sont le même symbole dans la table de la bibliothèque de sortie. (Cela fait partie de la raison pour laquelle les directives .NET recommandent PascalCasing pour les noms de classe et méthodes).
Celui qui obtient choisi sera le premier de la émette du compilateur, ce qui est assez non déterministe du point de vue d'un programmeur!
Vous pouvez choisir l'un ou l'autre, en utilisant le paramètre /names
de TlbExp, mais les deux boîtiers ne peuvent pas coexistent dans la bibliothèque.
Pour utiliser le fichier de noms TlbExp, vous créez simplement un fichier avec une liste d'identifiants, une par ligne:
RandomClass
SomeOtherIdentifier
Ensuite, vous l'appelez comme ceci:
tlbexp MyAssembly.dll /names=MyNames.txt
TlbExp utilisera alors la version du symbole défini dans le fichier de noms.