tlbexp.exe меняет регистр имен методов
У меня довольно странная проблема. Я экспортирую интерфейс из библиотеки C# в COM. Я включил настройку проекта 'register with COM', поэтому он вызывает tlbexp.exe для создания типа libs.
Мы используем регистр верблюдов в именах наших методов, и я заметил, что экспортированная библиотека типов меняет любой метод, который совпадает с именем класса, на регистр Паскаля...
например
interface IFoo
{
void randomClass()
}
class RandomClass
{
}
Экспортированный IFoo в типе lib определяет IFoo->RandomClass() вместо IFoo->randomClass()
Любые идеи о том, что вызывает это и как это остановить?
1 ответ
Поскольку COM нечувствителен к регистру, "RandomClass" и "randomClass" являются одним и тем же символом в таблице выходной библиотеки. (Это одна из причин, почему в руководствах.NET рекомендуется использовать PascalCasing для имен классов и методов.)
Тот, который будет выбран, будет первым, который испустит компилятор, и это довольно недетерминировано с точки зрения программиста!
Вы можете выбрать один или другой, используя tlbexp /names
параметр, но оба корпуса не могут сосуществовать в библиотеке.
Чтобы использовать файл имен tlbexp, вы просто создаете файл со списком идентификаторов, по одному на строку:
RandomClass
SomeOtherIdentifier
Тогда вы называете это так:
tlbexp MyAssembly.dll /names=MyNames.txt
Затем tlbexp будет использовать версию символа, определенного в файле имен.