Вы можете сделать это, но вопрос в том, зачем вам это нужно?
Если вы хотите обратиться к GUID интерфейса, а не к имени интерфейса, тогдадо тех пор, пока у этого интерфейса есть связанный IID (GUID), вы можете использовать имя интерфейса, где ожидается TGUID:
type
IFoo = interface(IDispatch)
['{00000000-6666-6666-6666-666666666666}']
//properties
//methods
end;
// meanwhile, elsewhere in the project...
sFooIID := GUIDToString(IFoo);
Это менее «шумное» объявление интерфейса, которое исключает возможность того, чтоВы можете объявить / сослаться на константу IID, которая на самом деле не связана с интерфейсом, который вы считаете (или вообще не был связан с этим IID).
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, вместо того, чтобы иметь отдельное объявление const, устраняют вероятность этих ошибок.
При использовании отдельных объявлений констант для IID - если вам это абсолютно необходимо - вы можете защитить отОдна из этих проблем заключается в использовании интерфейсов, в которых ожидаются IID.Но это, вероятно, ухудшает ситуацию в случае, когда для определенного интерфейса был использован неправильный IID:
// 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