Yes, you can.
Basically, you have to call GetTypeInfoCount(), GetTypeInfo(), GetTypeAttr() and other functions (All documented by Microsoft).
Here is a function to list all method names including property getter/setter. Similar code can enumerate argument list, argument data types and return value data type.
procedure DisplayMethodNames(
const DispIntf : IDispatch;
const IntfName : String;
Strings : TStrings);
var
Count : Integer;
TypeInfo : ITypeInfo;
TypeAttr : PTypeAttr;
FuncDesc : PFuncDesc;
HR : HRESULT;
I : Integer;
FuncName : WideString;
begin
if IntfName <> '' then
Strings.Add(IntfName);
Count := 0;
HR := DispIntf.GetTypeInfoCount(Count);
if Failed(HR) or (Count = 0) then
Exit;
HR := DispIntf.GetTypeInfo(0, 0, TypeInfo);
if Succeeded(HR) and (TypeInfo <> nil) then begin
TypeAttr := nil;
HR := TypeInfo.GetTypeAttr(TypeAttr);
if Succeeded(HR) and (TypeAttr <> nil) then begin
for I := 0 to TypeAttr.cFuncs - 1 do begin
FuncDesc := nil;
HR := TypeInfo.GetFuncDesc(I, FuncDesc);
if Succeeded(HR) and (FuncDesc <> nil) then begin
TypeInfo.GetDocumentation(FuncDesc.memid,
@FuncName,
nil, // DocString,
nil, // HelpContext
nil); // HelpFile
if Length(FuncName) <> 0 then
Strings.Add(Format(' %-3d %s', [I, FuncName]));
TypeInfo.ReleaseFuncDesc(FuncDesc);
end;
end;
TypeInfo.ReleaseTypeAttr(TypeAttr);
end;
end;
end;