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