This MSDN article指出任何ProgID必须满足几个正式要求,包括长度限制。然而,如果违反这些条款,会发生什么事情。
我在我们的代码库中找到了几个ProgID长度超过39个字符的地方,但是它们似乎一切正常,包括ProgIDFromCLSID()和CLSIDFromProgID()。
由于违反这些要求非常容易,因此了解此类违规行为的真正可能后果会非常有趣吗?
答案 0 :(得分:3)
我猜你得到的是未定义的行为。这可以是从正常功能到崩溃,吃掉小猫,牺牲第一胎,& c。
更重要的是,一些要求可能会告诉你一些事情:
Windows可能不会立即咬你,但其他事情可能会发生。
答案 1 :(得分:1)
我还没有答案 - 我正在研究这个问题,我自己 - 但我确实遇到过这个问题:
在blog by Andrew Whitechapel中的托管代码中的常见做法 指定名称空间和类型名称 这很冗长,但这很容易 超过a的最大允许长度 ProgId(39个字符)。如果你这样做 这个,没有迹象表明 问题,直到你尝试注册 Excel加载项 - 即使这样, Excel只是告诉你加载项 无效,不再提供 详情。为了避免这个问题,你 应该始终指定一个ProgId 明确地,使用ProgId 属性。还要记住 下划线在托管代码中是合法的, 但在ProgIds中是非法的。
表明限制可能不仅仅是程序员使用短缓冲区强制执行的约定。