I'm not sure how useful this will be (i usually get the concept wrong ). It's not dynamic, but maybe some of the "professionals" on this site can do something with it.

This produces the GUID for a hard coded interface and as it just checks the interface Type, there's no need for any instancing to be done:
[pascal]

uses
TypInfo;

function GetGUID: string;
var
pinfo: PTypeInfo;
pdata: PTypeData;
begin
pinfo:=TypeInfo(IMyInterface);
if pinfo<>nil then begin
pdata:=GetTypeData(pinfo);
Result:=pinfo.name+': '+GUIDtoString(pdata.Guid);
end
else Result:='No GUID';
end;
[/pascal]

Like i said, this won't work dynamically, and i couldn't find a way (yet) of passing anything other than a type. I tried typecasting and all sorts