Что произойдет, если я нарушу требования, предъявляемые к ProgID? - PullRequest
1 голос
/ 18 ноября 2009

В этой статье MSDN говорится, что любой ProgID должен соответствовать нескольким формальным требованиям, включая ограничение длины. Однако ничего не сказано о том, что произойдет, если они будут нарушены.

Я нашел несколько мест в нашей кодовой базе, где ProgID длиннее 39 символов, но для них все, кажется, работает нормально, включая ProgIDFromCLSID () и CLSIDFromProgID ().

Поскольку нарушить эти требования довольно легко, было бы очень интересно узнать, каковы реальные возможные последствия таких нарушений?

Ответы [ 2 ]

3 голосов
/ 18 ноября 2009

Полагаю, вы получите неопределенное поведение. Это может варьироваться от нормального функционирования до сбоев, поедания котят, принесения в жертву первенцев и т. Д.

Более того, некоторые требования, вероятно, говорят вам несколько вещей:

  • Не более 39 символов: Другое программное обеспечение может использовать буфер фиксированного размера из 40 символов для хранения ProgID. Поэтому они будут иметь только первые 39 и могут не найти ваш ProgID, если он длиннее.
  • Не начинать с цифры; не содержать знаков препинания, кроме точек: Опять же, это контракт. Программное обеспечение может полагаться на это для проверки того, что ProgID, полученные им откуда-то, действительно являются ProgID, а не чем-то совершенно другим, например.

Windows может не укусить вас сразу, но другие вещи могут.

1 голос
/ 29 декабря 2009

У меня пока нет ответа - я сам исследую эту проблему - но я сталкивался с этим:

Это распространенная практика в управляемом коде указать пространства имен и имена это многословно, но это легко превышать максимально допустимую длину ProgId (39 символов). Если вы делаете это, нет никаких признаков проблема, пока вы не попытаетесь зарегистрировать надстройка с Excel - и даже тогда, Excel просто говорит вам, что надстройка является недействительным, без предоставления больше подробно. Чтобы избежать этой проблемы, вы всегда следует указывать ProgId явно, используя ProgId приписывать. Также помните, что подчеркивания являются законными в управляемом коде, но незаконно в ProgIds.

в блоге Эндрю Уайтчепела , в котором говорится, что ограничение может быть больше, чем просто соглашение, применяемое программистами, использующими короткие буферы.

...