Pregunta

Tengo un problema bastante extraño. Estoy exportando una interfaz de una biblioteca de C # a COM. He habilitado el Registro con el COM 'ajuste del proyecto, por lo que llama Tlbexp.exe para hacer las librerias tipo.

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 lo que causa esto y cómo detenerlo?

¿Fue útil?

Solución

Desde COM es sensible a las mayúsculas, tanto "RandomClass" y "randomClass" son el mismo símbolo en la mesa de la biblioteca de salida. (Esto es parte de la razón por la cual las directrices recomiendan .NET PascalCasing para los nombres y métodos de la clase.)

el que consigue elegido será el primero que emite el compilador, y esto es bastante no determinista desde el punto de vista de un programador!

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

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

RandomClass
SomeOtherIdentifier

A continuación, se llame así:

tlbexp MyAssembly.dll /names=MyNames.txt

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top