2010-06-28 9 views
5

Ich habe ein ziemlich seltsames Problem. Ich exportiere eine Schnittstelle von einer C# -Bibliothek nach COM. Ich habe die Projekteinstellung 'Mit COM registrieren' aktiviert, also ruft tlbexp.exe den Typ libs auf.tlbexp.exe ändert Methodennamen 'Fall

Wir verwenden Kamel Fall auf unserer Methodennamen und ich bemerkte, dass die exportierte Typbibliothek ändert diese jede Methode, die mit einem Klassennamen Pascal Fall übereinstimmen passiert ...

zB

interface IFoo 
{ 
void randomClass() 
} 

class RandomClass 
{ 
} 

Der exportierte IFoo im Typ lib definiert IFoo-> RandomClass() anstelle von IFoo-> randomClass()

Irgendwelche Ideen, was das verursacht und wie man es stoppt?

Antwort

6

Da COM nicht zwischen Groß- und Kleinschreibung unterscheidet, sind sowohl "RandomClass" als auch "randomClass" dasselbe Symbol in der Tabelle der Ausgabebibliothek. (Dies ist einer der Gründe, warum die .NET-Richtlinien PascalCasing für Klassennamen und -methoden empfehlen.)

Der Typ, der ausgewählt wird, wird der erste sein, der vom Compiler ausgegeben wird, und dies ist vom Programmierer aus nicht deterministisch Sicht!

Sie können eine oder das andere wählen, die TlbExp /names Parameter verwenden, aber beide Gehäuse nicht koexistieren in der Bibliothek.

RandomClass 
SomeOtherIdentifier 

Dann rufen Sie es wie folgt::

tlbexp MyAssembly.dll /names=MyNames.txt 

TlbExp verwenden dann

Um TlbExp Die Namen der Datei, erstellen Sie einfach eine Datei mit einer Liste von Kennungen, eine pro Zeile zu verwenden die Version des Symbols, das in der Namensdatei definiert ist.

+0

Danke! Ich wusste nie davon. – ljbade

+0

Gibt es eine Möglichkeit, Regasm zu verwenden, um/Namen zu verwenden, wenn es/tlb tut? – Squirrel

+0

@ Squirrel: Nicht, dass ich weiß. – porges

Verwandte Themen