如果我违反对ProgIDs的要求会怎样?

时间:2009-11-18 08:24:37

标签: windows com com-interop ole progid

This MSDN article指出任何ProgID必须满足几个正式要求,包括长度限制。然而,如果违反这些条款,会发生什么事情。

我在我们的代码库中找到了几个ProgID长度超过39个字符的地方,但是它们似乎一切正常,包括ProgIDFromCLSID()和CLSIDFromProgID()。

由于违反这些要求非常容易,因此了解此类违规行为的真正可能后果会非常有趣吗?

2 个答案:

答案 0 :(得分:3)

我猜你得到的是未定义的行为。这可以是从正常功能到崩溃,吃掉小猫,牺牲第一胎,& c。

更重要的是,一些要求可能会告诉你一些事情:

  • 不超过39个字符:其他软件可能使用40个字符的固定大小缓冲区来存储ProgID。因此,它们只有前39个,如果更长,可能找不到你的ProgID。
  • 不以数字开头;除了句点之外不包含标点符号:同样,这是一个合同。例如,软件可能依赖于此来验证它从某些地方获得的ProgID,它们实际上是ProgID,而不是完全不同的东西。

Windows可能不会立即咬你,但其他事情可能会发生。

答案 1 :(得分:1)

我还没有答案 - 我正在研究这个问题,我自己 - 但我确实遇到过这个问题:

  

托管代码中的常见做法   指定名称空间和类型名称   这很冗长,但这很容易   超过a的最大允许长度   ProgId(39个字符)。如果你这样做   这个,没有迹象表明   问题,直到你尝试注册   Excel加载项 - 即使这样,   Excel只是告诉你加载项   无效,不再提供   详情。为了避免这个问题,你   应该始终指定一个ProgId   明确地,使用ProgId   属性。还要记住   下划线在托管代码中是合法的,   但在ProgIds中是非法的。

blog by Andrew Whitechapel中的

表明限制可能不仅仅是程序员使用短缓冲区强制执行的约定。