tlbexp.exe меняет регистр имен методов - PullRequest
5 голосов
/ 28 июня 2010

У меня довольно странная проблема.Я экспортирую интерфейс из библиотеки C # в COM.Я включил настройку проекта 'register with COM', поэтому он вызывает tlbexp.exe для создания типов libs.

Мы используем case-case в именах наших методов, и я заметил, что экспортированная библиотека типов изменяет эти любые методыэто совпадает с именем класса в регистре Паскаля ...

например

interface IFoo
{
void randomClass()
}

class RandomClass
{
}

Экспортированный IFoo в типе lib определяет IFoo-> RandomClass () вместо IFoo-> randomClass()

Любые идеи о том, что вызывает это и как это остановить?

1 Ответ

6 голосов
/ 28 июня 2010

Поскольку COM нечувствителен к регистру, и "RandomClass", и "randomClass" являются одним и тем же символом в таблице выходной библиотеки.(Это одна из причин, почему в руководствах .NET рекомендуется использовать PascalCasing для имен и методов классов.)

Выбранный будет первым, который испустит компилятор, и это довольно недетерминировано с точки зренияточка зрения программиста!

Вы можете выбрать один или другой, используя параметр /names в tlbexp, но оба корпуса не могут сосуществовать в библиотеке.

Комуиспользуйте файл имен tlbexp, вы просто создаете файл со списком идентификаторов, по одному на строку:

RandomClass
SomeOtherIdentifier

Затем вы называете его так:

tlbexp MyAssembly.dll /names=MyNames.txt

Затем tlbexp будет использоватьверсия символа, определенного в файле имен.

...