Domanda

Ho un problema piuttosto strano. Sono esportare un'interfaccia da una libreria C # per COM. Ho permesso 'registrare con COM' l'impostazione del progetto, in modo che le chiamate Tlbexp.exe per fare le librerie tipo.

Usiamo caso cammello su nostri nomi di metodo e ho notato che la libreria dei tipi esportati cambia questi qualsiasi metodo che coincide con un nome di classe per caso Pascal ...

es

interface IFoo
{
void randomClass()
}

class RandomClass
{
}

L'IFoo esportati tipo lib definisce IFoo-> RandomClass () anziché IFoo-> randomClass ()

Tutte le idee su ciò che causa questo e come fermarlo?

È stato utile?

Soluzione

Dal COM è case-insensitive, sia "RandomClass" e "randomClass" sono lo stesso simbolo nella tabella della biblioteca di uscita. (Questo è parte del motivo per cui le linee guida raccomandano .NET PascalCasing per i nomi e metodi della classe.)

Quello che viene scelto sarà il primo dei emette compilatore, e questo è abbastanza non deterministico dal punto di vista di un programmatore!

È possibile scegliere uno o l'altro, utilizzando il parametro /names di TlbExp, ma entrambe le intelaiature non possono coesistono nella biblioteca.

Per usare TlbExp del file nomi, è sufficiente creare un file con un elenco di identificatori, uno per riga:

RandomClass
SomeOtherIdentifier

Poi si chiama in questo modo:

tlbexp MyAssembly.dll /names=MyNames.txt

TlbExp utilizzerà quindi la versione del simbolo definito nel file di nomi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top