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 будет использовать версию символа, определенного в файле имен.

Другие вопросы по тегам