Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top