1

このMSDNの記事では、ProgIDは、長さの制限を含め、いくつかの正式な要件を満たす必要があると述べています。しかし、それらが違反された場合に何が起こるかについては何も言われていません。

コードベースでProgIDが39文字より長い場所をいくつか見つけましたが、ProgIDFromCLSID()とCLSIDFromProgID()を含め、すべてが正常に機能しているようです。

これらの要件に違反することは非常に簡単なので、そのような違反の実際に起こりうる結果を知ることは非常に興味深いでしょう。

4

2 に答える 2

4

私はあなたが得るものは未定義の振る舞いだと思います。これは、正常に機能しているものからクラッシュ、子猫が食べられている、長子が犠牲になっているなど、さまざまです。

さらに重要な点として、いくつかの要件はおそらくいくつかのことを教えてくれます。

  • 39文字以内:他のソフトウェアは、ProgIDを格納するために40文字の固定サイズのバッファーを使用する場合があります。したがって、最初の39個しかなく、それより長い場合はProgIDが見つからない可能性があります。
  • 数字で始まらないでください。ピリオド以外の句読点は含まれていません。これも契約です。ソフトウェアはこれに依存して、どこかから取得したProgIDが、実際にはProgIDであり、まったく異なるものではないことを確認する場合があります。

Windowsはすぐにあなたを噛まないかもしれませんが、他のものはそうかもしれません。

于 2009-11-18T08:27:47.663 に答える
2

私はまだ答えを持っていません-私はこの問題を自分で研究しています-しかし私はこれに出くわしました:

マネージコードでは、冗長な名前空間とタイプ名を指定するのが一般的ですが、これはProgIdの最大許容長(39文字)を簡単に超える可能性があります。これを行うと、アドインをExcelに登録しようとするまで問題の兆候はありません。それでも、Excelは、詳細を提供せずに、アドインが無効であると通知するだけです。この問題を回避するには、ProgId属性を使用して、常にProgIdを明示的に指定する必要があります。また、アンダースコアはマネージコードでは有効ですが、ProgIdでは無効であることを忘れないでください。

Andrew Whitechapelによるブログで、制限は、短いバッファーを使用するプログラマーによって強制される単なる規則以上のものである可能性があることを示唆しています。

于 2009-12-28T21:27:17.110 に答える