2010-06-28 13 views
5

Tengo un problema bastante extraño. Estoy exportando una interfaz de una biblioteca C# a COM. He habilitado la configuración del proyecto "registrar con COM", por lo que llama a tlbexp.exe para crear el tipo libs.tlbexp.exe cambia el nombre de los métodos 'caso

Utilizamos caso de camellos en nuestros nombres de métodos y me di cuenta de que la biblioteca de tipos exportados cambia este cualquier método que coincide con un nombre de clase para el caso de Pascal ...

por ejemplo

interface IFoo 
{ 
void randomClass() 
} 

class RandomClass 
{ 
} 

El IFoo exportado en el tipo lib define IFoo-> RandomClass() en lugar de IFoo-> randomClass()

¿Alguna idea sobre qué causa esto y cómo detenerlo?

Respuesta

6

Como COM distingue entre mayúsculas y minúsculas, tanto "RandomClass" como "randomClass" son el mismo símbolo en la tabla de la biblioteca de salida. (Esta es una de las razones por las cuales las pautas de .NET recomiendan PascalCasing para nombres y métodos de clases).

El que se elija será el primero que emita el compilador, y esto es bastante no determinista desde el punto de un programador ¡de vista!

Puede elegir uno o el otro, con el parámetro de TlbExp /names, pero ambas carcasas no puede coexistir en la biblioteca.

Para utilizar los nombres de archivo de TlbExp, sólo tiene que crear un archivo con una lista de identificadores, uno por línea:

RandomClass 
SomeOtherIdentifier 

Entonces lo llaman así: entonces usará

tlbexp MyAssembly.dll /names=MyNames.txt 

TlbExp la versión del símbolo definido en el archivo de nombres.

+0

Gracias! Nunca supe de eso. – ljbade

+0

¿Hay alguna forma de usar Regasm para usar/names cuando lo hace/tlb? – Squirrel

+0

@Squirrel: no que yo sepa. – porges

Cuestiones relacionadas