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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top