缶これを行うのはなぜですか?
あなたはそのインターフェイスが関連付けられているIID(GUID)を持っている限り、その後、インターフェイスの名前ではなく、インターフェイスのGUIDを参照したい場合、あなたはTGUIDが期待されているインタフェース名を使用することができます
を
type
IFoo = interface(IDispatch)
['{00000000-6666-6666-6666-666666666666}']
//properties
//methods
end;
// meanwhile, elsewhere in the project...
sFooIID := GUIDToString(IFoo);
これはあまり「ノイズの多い」インターフェイスの宣言であり、実際にはインターフェイスと関連付けられていない(または実装されていない)IID定数を宣言または参照する可能性を回避します。そのIIDには全く関係しません)。インターフェースと IIDはなく、別のconst宣言を有する両方としてインターフェース自体を使用
const
IID_Foo = '{00000000-6666-6666-6666-666666666666}';
IID_Bar = '{00000000-6666-6666-6666-777777777777}';
type
IFoo = interface(IDispatch)
[IID_Bar] // WHOOPS!
:
end;
IBar = interface(IDispatch)
// WHOOPS again!!
:
end;
// Meanwhile, elsewhere in the project
sBarID := GUIDToString(IID_Bar); // Works, but is the IID of IFoo, not IBar
sFooID := GUIDToString(IID_Foo); // Works, but is an IID not associated with any interface
、これらの間違いの可能性を除去します。
IIDのために別個の定数宣言を使用する場合、絶対に必要ならば、IIDが期待されるインターフェイスを使用することでこれらの問題の1つに対して保護することができます。私はインターフェイスにGUIDを使用しなければならない理由@Rafaelが、私は本当に知っているおかげで、私は宣言についてちょうど心配です
// Cannot make the mistake of using an interface as a GUID if it has no IID at all
sBarID := GUIDToString(IBar); // Does not compile - IBar has no IID
// But if it's the wrong IID then you get results that are "correct" but not expected:
a := GUIDToString(IFoo);
b := GUIDToString(IID_Foo);
a <> b
私はあなたがその深刻なものとして抱える危険を見ることはできませんが、IIDをリテラルとしてインラインにするのはもっと慣れていると思います。 –
これはあなたが一番よく見逃す危険性です。 ;) @Deltics GUID定数をインタフェースとは別に宣言する1つの理由は、次のような理由によるものです。(つまり、必要性がない場合には、なぜそれらの危険性が生じるのでしょうか?) – Deltics
Delphiの回避策では、インターフェイス型の定数を宣言することができません。 [このQ&A](http://stackoverflow.com/a/704645/224704)を参照してください。 –