This MSDN article指出任何ProgID必须满足几个形式要求,包括长度限制。然而,没有人会说如果这些事情被侵犯会发生什么。如果我违反了对ProgIDs的要求,会发生什么情况?
我在我们的代码库中发现了ProgID长度超过39个字符的地方,仍然一切似乎都适合它们,包括ProgIDFromCLSID()和CLSIDFromProgID()。
由于违反这些要求非常容易,因此知道这些违规行为的真正可能后果是非常有趣的。
This MSDN article指出任何ProgID必须满足几个形式要求,包括长度限制。然而,没有人会说如果这些事情被侵犯会发生什么。如果我违反了对ProgIDs的要求,会发生什么情况?
我在我们的代码库中发现了ProgID长度超过39个字符的地方,仍然一切似乎都适合它们,包括ProgIDFromCLSID()和CLSIDFromProgID()。
由于违反这些要求非常容易,因此知道这些违规行为的真正可能后果是非常有趣的。
我想你得到的是未定义的行为。这可以从正常运作的范围崩溃,小猫被吃掉,牺牲的firstborn,& c。
更重要的是,一些要求可能会告诉你一些事情:
Windows可能不立即咬你,但其他的事情可能会。
是的,某些程序对progids和clsids使用相同的缓冲区(这是38字节{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}表单。 – 2009-11-18 17:42:46
我没有答案,但 - 我研究这个问题,我自己 - 但我没有碰到过这样的:
这是在托管代码 常见的做法是指定命名空间和typenames 这是详细的,但这可以很容易地 超过一个 ProgId(39个字符)的最大允许长度。如果你这样做 这一点,有没有 问题的指示,直到你尝试注册 加载项与Excel - 即使如此, Excel中简单地告诉你,外接 是无效的,没有提供任何更多的 详细。为避免此问题,您应使用ProgId 属性明确指定ProgId 。还请记住 下划线在托管代码中是合法的, 但在ProgIds中是非法的。
在blog by Andrew Whitechapel这表明,限制可能不仅仅是程序员使用短缓冲区执行的惯例。
teh的要求违反了你。 (sry,无法抗拒) – mpen 2009-11-18 08:25:55
看起来他们不想立刻违背我的意思,而是等待某件事...... – sharptooth 2009-11-18 08:27:02