开发者

What happens if I violate the requirements imposed on ProgIDs?

开发者 https://www.devze.com 2022-12-11 23:42 出处:网络
This MSDN article states that any ProgID must meet several formal requirements, length restriction included. However nothing is said about what happens 开发者_运维百科if those are violated.

This MSDN article states that any ProgID must meet several formal requirements, length restriction included. However nothing is said about what happens 开发者_运维百科if those are violated.

I found several places in our codebase where ProgIDs are longer than 39 characters, still everything seems to work allright for them, ProgIDFromCLSID() and CLSIDFromProgID() included.

Since violating those requirements is quite easy it would be very interesting to know what are the real possible consequences of such violations?


I guess what you get is undefined behavior. This can range from normal functioning to crashes, kittens being eaten, firstborns sacrificed, &c.

More to the point, some requirements probably tell you a few things:

  • No more than 39 characters: Other software might use a fixed-size buffer of 40 chars to store a ProgID. They would therefore only have the first 39 and might not find your ProgID if it's longer.
  • Not start with a digit; contain no punctuation except periods: Again, this is a contract. Software may rely on this to verify ProgIDs it gets from somewhere that they are really ProgIDs and not something entirely different, for example.

Windows might not bite you immediately but other things might.


I don't have an answer yet -- I'm researching this problem, myself -- but I did come across this:

It is common practice in managed code to specify namespaces and typenames that are verbose, but this can easily exceed the maximum allowed length of a ProgId (39 characters). If you do this, there's no indication of the problem until you try to register the add-in with Excel – and even then, Excel simply tells you that the add-in is invalid, without providing any more detail. To avoid this problem, you should always specify a ProgId explicitly, using the ProgId attribute. Also remember that underscores are legal in managed code, but illegal in ProgIds.

in a blog by Andrew Whitechapel which suggests that the limit may be more than just a convention enforced by programmers using short buffers.

0

精彩评论

暂无评论...
验证码 换一张
取 消