如果我违反了 ProgID 的要求,会发生什么?

发布于 2024-08-11 18:53:52 字数 321 浏览 8 评论 0原文

这篇 MSDN 文章 指出任何 ProgID 都必须满足一些正式要求,包括长度限制。然而,没有提及如果违反这些规定会发生什么。

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

由于违反这些要求非常容易,因此了解此类违规行为真正可能产生的后果是什么将是非常有趣的?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡淡的优雅 2024-08-18 18:53:52

我猜你得到的是未定义的行为。这可能包括正常功能到崩溃、小猫被吃掉、长子被牺牲等等。

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

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

Windows 可能不会立即咬住你,但其他东西可能会。

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.

情深缘浅 2024-08-18 18:53:52

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

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

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文