У меня есть этот старый компонент C++ COM. Я взял последнюю базу кода, построил ее и обнаружил, что одно из свойств стало более строгим. Например, в предварительно скомпилированной dll у меня есть свойство «Тип», но при построении из источника оно называется «тип». Idl показывает, что свойство называется «Тип». Так что же может происходить здесь?C++ Открытое свойство COM в idl показывает как «случайный» «0»
ответ
После трения моего хрустального шара какое-то время он пришел к выводу, что вы используете утилиту .NET Tlbimp.exe для преобразования библиотеки типов в класс .NET interop. У него есть ошибка, он неправильно заполняет оболочку идентификатора, если есть символ в библиотеке типов с тем же именем, но в другом случае. Как объявление метода ранее в библиотеке типов, которое принимает аргумент с именем «тип». Любой идентификатор с именем «Тип» в остальной библиотеке типов преобразуется в «тип».
Усовершенствованная версия утилиты available here.
COM нечувствителен к регистру, поэтому в таблице символов библиотеки имеется только одна запись для символа «type
». Версия, помещенная в таблицу символов, является первой, с которой сталкивается компилятор.
от Microsoft advice on the matter просто:
Убедитесь, что то же самое имя уже не присутствует в файле IDL при введении нового идентификатора.
Вы должны придерживаться либо Type
или type
в IDL, для получения стабильных результатов.
Моя проблема заключалась в том, что параметр 'значение' в одном методе ломал свойство« Значение » –
- 1. Как создать свойство только для чтения, открытое COM?
- 2. Как объявить typdef в COM-объекте idl?
- 3. В COM IDL как ссылаться на перечисление от COM-зависимостей?
- 4. Правильное расширение COM-интерфейса (IDL)
- 5. Открытое свойство TypeScript Setter
- 6. C++ открытые имена свойств не совпадают имена, приведенные в IDL
- 7. Скомпилировать/перевести Microsoft COM IDL на Idiomatic C++?
- 8. Почему мой случайный случайный случайный случайный образец показывает ошибку?
- 9. Как добавить документацию в открытое свойство?
- 10. COM: как указать конкретный тип COM объекта в качестве аргумента в IDL
- 11. Другое, другое открытое() возвращает 0
- 12. C# DatagridView показывает 0 столбцов
- 13. Открытое свойство, не являющееся подклассом
- 14. Открытое свойство как ObjectDataSource Выберите параметр
- 15. WPF StringFormat = {0: C} показывает как доллары
- 16. Как сгенерировать случайный двойник между 0 и переменной в C++
- 17. C#: Почему следующее сравнение показывает, что 0! = 0
- 18. Открытое свойство VB.NET по одной строке
- 19. COM-интерфейсы, объявленные в C++
- 20. Как отключить масштабирование DPI WPF HwndSources, открытое через COM?
- 21. Основная страница Открытое свойство недоступно в содержании Страница
- 22. апплет показывает случайный результат суммы
- 23. случайный массив в c
- 24. Случайный двойной C++ 11
- 25. Как пройти RECT в COM
- 26. C# + COM Interop, детерминированный релиз
- 27. Отправка массива строк из C# в C++ через COM
- 28. Случайный диапазон номеров, исключить 0
- 29. Как получить IDL из сборки .NET (или как преобразовать TLB в IDL) в командной строке?
- 30. Сменить заголовочный файл IDL
На самом деле я просто говорю о просмотре библиотеки в OLEVIEW, поэтому нет .Net. Однако, возможно, по каким-то совпадениям, что вы говорите, происходит в этом случае. Я посмотрел на недавние изменения .. новый метод был добавлен с параметром с именем «тип». Затем я прокомментировал это, что свойство «Тип» было отображено правильно. Я тогда раскоментировал это .. и .. это работает! ?? да? используя VC++ 6 IDE для этого компонента, поэтому не шокирован, немного расстроен. Спасибо за быстрый ответ. –
Интересно, конечно, звучит так, что ошибка фактически находится в реализации GetTypeLib, предоставляемой COM. –
Не ошибка - см. Мой ответ ... – porges