ProgID に課せられた要件に違反した場合はどうなりますか?
-
20-09-2019 - |
質問
この MSDN 記事 ProgID は、長さの制限を含め、いくつかの正式な要件を満たさなければならないと述べています。しかし、これらが違反された場合に何が起こるかについては何も語られていません。
コードベース内で ProgID が 39 文字を超える箇所がいくつか見つかりましたが、それでも ProgIDFromCLSID() と CLSIDFromProgID() を含め、すべてが正常に動作しているようです。
これらの要件に違反することは非常に簡単であるため、そのような違反が実際にどのような結果をもたらす可能性があるかを知ることは非常に興味深いことではないでしょうか?
解決
あなたが得るものは次のとおりだと思います 未定義の動作。 これは、通常の機能からクラッシュ、子猫の食べられ、初子が犠牲になるなど多岐にわたります。
さらに言えば、いくつかの要件からいくつかのことが分かるでしょう。
- 39 文字以内: 他のソフトウェアでは、ProgID を格納するために 40 文字の固定サイズのバッファーを使用する場合があります。したがって、最初の 39 個しか持っておらず、それより長い場合は ProgID が見つからない可能性があります。
- 数字で始めないでください。ピリオド以外の句読点は含まれません。 繰り返しますが、これは契約です。ソフトウェアはこれに依存して、たとえば、どこかから取得した ProgID が本当に ProgID であり、まったく別のものではないことを検証することがあります。
Windows がすぐに影響を与えることはないかもしれませんが、他のものは影響を受ける可能性があります。
他のヒント
私はまだ答えを持っていないが、私はこれに遭遇しました。
これは、マネージコードで一般的に行われています 名前空間と型名を指定します 冗長ではありますが、これは簡単にできること の最大許容長を超え プログラムID(39文字)。もしあなたがそうするなら これは、の兆候はありません あなたが登録しようとするまで問題 その後も及び、 - エクセルで、追加 Excelは、単にアドインことを示しています 任意のより多くを提供せず、無効です 詳細。この問題を回避するには、あなた 常にプログラムIDを指定する必要があります 明示的に、プログラムIDを使用して 属性。また、ことを覚えておいてください アンダースコアは、マネージコードでは合法です しかし、ProgIDのでは違法ます。
アンドリューブログで制限が短いバッファを使用して、プログラマによって強制単なる慣習よりであることを示唆しているホワイトチャペルでます。