.tlh, сгенерированный на 2 машинах, отличается

Время от времени я получаю это, и простое отключение / повторное подключение устройства помогает.

6
задан VividD 25 November 2014 в 17:31
поделиться

3 ответа

Вы можете использовать атрибут переименовать для импорта , чтобы явно переименовать свойства. Допустим, у вас есть propA , который иногда становится PropA и propB , который иногда становится PropB . Чтобы всегда иметь PropA и PropB , используйте переименовать следующим образом:

#import <library> rename( "propA", "PropA" ) rename( "propB", "PropB" )

Используйте это осторожно - это вызывает простую замену текста, которая работает для любых идентификаторов, с которыми он сталкивается в библиотеке типов. В некоторых случаях это может вызвать нежелательные побочные эффекты, которые сложно устранить.

4
ответ дан 10 December 2019 в 02:52
поделиться

Проверка работоспособности: вы абсолютно уверены, что одна и та же директива #import используется на обеих машинах? т.е. точно такие же исходные файлы компилируются?

Попробуйте создать общий сетевой ресурс в каталоге, содержащем проект, и откройте его на другом компьютере, чтобы быть на 1000% уверенным, что это те же исходные файлы, которые компилируются.

Извините, я не знаю '

0
ответ дан 10 December 2019 в 02:52
поделиться

У меня такая же проблема.

С помощью другого вопроса SO ( https://stackoverflow.com/questions/708721/compare-type-libraries-generated-by-tlbexp ) я нашел этот фрагмент контента сообщества:

http : //social.msdn.microsoft.com/Forums/en-US/clr/thread/5003c486-ed3f-4ec8-8398-a1251b0f9e74

Цитата из этого содержания:

В документации tlbexp есть один полезный контент сообщества:

http://msdn2.microsoft.com/en-gb/library/hfzzah2c (VS.80) .aspx

Цитата:

«Причина использования параметра / names заключается в том, что тип библиотеки хранят каждый идентификатор в таблице без учета регистра. Выигрывает первый обнаруженный случай. Таким образом, класс с именем Monitor может в конечном итоге быть представлен как «монитор», если первым встречается параметр с таким именем (и порядок, в котором идентификаторы встречающиеся могут измениться, просто перекомпилировав вашу сборку!) / names может гарантировать стабильную оболочку. "

Основная причина, по-видимому, заключается в ошибке в midl, описанной здесь:

http://support.microsoft.com/default .aspx? scid = kb; en-us; 220137

Цитата:

«Когда есть два идентификатора, которые различаются только регистром, регистр второго идентификатора изменяется, чтобы отразить регистр первого».

В качестве решения я снял отметку с опции «зарегистрировать для COM. interop "в настройках проекта и добавил шаги после сборки

" $ (DevEnvDir) .... \ SDK \ v2.0 \ Bin \ tlbexp "$ (TargetFileName) / names:" $ (ProjectDir) Names .текст" % windir% \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm $ (TargetFileName)

Файл имен содержит записи, которые определяют, как следует выполнять капизацию.В моем случае он содержит только одну строку:

ID

С уважением

Бернд Риттер

Использование / names решило эту проблему для меня.

5
ответ дан 10 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: