2010-07-05 2 views
1

У меня есть этот старый компонент C++ COM. Я взял последнюю базу кода, построил ее и обнаружил, что одно из свойств стало более строгим. Например, в предварительно скомпилированной dll у меня есть свойство «Тип», но при построении из источника оно называется «тип». Idl показывает, что свойство называется «Тип». Так что же может происходить здесь?C++ Открытое свойство COM в idl показывает как «случайный» «0»

ответ

3

После трения моего хрустального шара какое-то время он пришел к выводу, что вы используете утилиту .NET Tlbimp.exe для преобразования библиотеки типов в класс .NET interop. У него есть ошибка, он неправильно заполняет оболочку идентификатора, если есть символ в библиотеке типов с тем же именем, но в другом случае. Как объявление метода ранее в библиотеке типов, которое принимает аргумент с именем «тип». Любой идентификатор с именем «Тип» в остальной библиотеке типов преобразуется в «тип».

Усовершенствованная версия утилиты available here.

+0

На самом деле я просто говорю о просмотре библиотеки в OLEVIEW, поэтому нет .Net. Однако, возможно, по каким-то совпадениям, что вы говорите, происходит в этом случае. Я посмотрел на недавние изменения .. новый метод был добавлен с параметром с именем «тип». Затем я прокомментировал это, что свойство «Тип» было отображено правильно. Я тогда раскоментировал это .. и .. это работает! ?? да? используя VC++ 6 IDE для этого компонента, поэтому не шокирован, немного расстроен. Спасибо за быстрый ответ. –

+0

Интересно, конечно, звучит так, что ошибка фактически находится в реализации GetTypeLib, предоставляемой COM. –

+0

Не ошибка - см. Мой ответ ... – porges

4

COM нечувствителен к регистру, поэтому в таблице символов библиотеки имеется только одна запись для символа «type». Версия, помещенная в таблицу символов, является первой, с которой сталкивается компилятор.

от Microsoft advice on the matter просто:

Убедитесь, что то же самое имя уже не присутствует в файле IDL при введении нового идентификатора.

Вы должны придерживаться либо Type или type в IDL, для получения стабильных результатов.

+0

Моя проблема заключалась в том, что параметр 'значение' в одном методе ломал свойство« Значение » –

Смежные вопросы