TLBEXP.EXE изменяет названия методов
Вопрос
У меня довольно странная проблема. Я экспортирую интерфейс из библиотеки C # в COM. Я позволил «регистрировать с настройкой проекта COM», поэтому он вызывает TLBEXP.EXE, чтобы сделать тип LIBS.
Мы используем чехол на верблюдах на наших именах методов, и я заметил, что экспортированная библиотека типа изменяет эти любой метод, который случается совпадает с именем класса в Pascal Case ...
например
interface IFoo
{
void randomClass()
}
class RandomClass
{
}
Экспортируемый IFOO в типе Lib определяет IFOO-> RandomClass () вместо Ifoo-> RandomClass ()
Любые идеи о том, что вызывает это и как его остановить?
Решение
Поскольку COM нечувствителен к регистру, как «RandomClass», так и «RandomClass» являются одинаковым символом в таблице выходных библиотеки. (Это является частью причины, по которой рекомендации .NET рекомендуют Pascalcasing для названий и методов классов.)
Тот, который выбирается, будет первым, который выделяет компилятор, и это довольно не детерминировано от точки зрения программиста!
Вы можете выбрать один или другой, используя TLBEXP /names
параметр, но оба оболочка не можем Сосуществуйте в библиотеке.
Чтобы использовать файл имена TLBEXP, вы просто создаете файл со списком идентификаторов, по одному в строке:
RandomClass
SomeOtherIdentifier
Тогда вы называете это так:
tlbexp MyAssembly.dll /names=MyNames.txt
TLBEXP затем использует версию символа, определенной в файле имени.