如何在程序中通过‘.DLL’知道COM的CLSID??(100分)

  • 主题发起人 主题发起人 yiminder
  • 开始时间 开始时间
Y

yiminder

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在程序中通过‘.DLL’知道COM的CLSID??
 
如果在DLL里面存在COM,是可以查出来的。。

建议看看ActiveX/Regsvr32/的例子。。。Delphi里面的例子。。
 
以下提供範例函式, 呼叫LoadLibProgID可以列舉出Dll中的CoClass的ProgID及GUID,
不要忘了在Use中加入ComObj及ActiveX

function GetTypeNameGUID(ITypeUse: ITypeInfo; var NameGUID: string): boolean;
var
uAttr: PTypeAttr;
sCoClass: WideString;
begin
with ITypeUse do
begin
OleCheck(GetTypeAttr(uAttr));
try
if ((uAttr^.wTypeFlags and TYPEFLAG_FHIDDEN) = 0) and
(uAttr^.cImplTypes > 0) then
begin
OleCheck(GetDocumentation(-1, @sCoClass, nil, nil, nil));
NameGUID := sCoClass + '/' + GUIDToString(uAttr^.guid);
Result := True;
end else
Result := False;
finally
ReleaseTypeAttr(uAttr);
end;
end;
end;

function LoadLibProgID(const FileName: string; ProgID: TStrings; RaiseError: boolean): boolean;
var
ITypeUse: ITypeLib;
swFile: WideString;
lRet: HResult;
begin
Result := False;
ProgID.BeginUpdate;
try
ProgID.Clear;
swFile := WideString(FileName);
lRet := LoadTypeLib(@swFile[1], ITypeUse);
if lRet = S_OK then begin
GetLibProgID(ITypeUse, ProgID);
Result := True;
end else
if RaiseError then OleCheck(lRet);
finally
ProgID.EndUpdate;
end;
end;
 
后退
顶部