首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Project Project1.exe raise exception class EOleSysError with message '没有注册类别',该

2012-05-22 
Project Project1.exeraise exception class EOleSysError with message 没有注册类别报错提示:Project

Project Project1.exe raise exception class EOleSysError with message '没有注册类别'
报错提示:
Project Project1.exe raise exception class EOleSysError with message '没有注册类别'
报错行: Animator := IUnknown(CreateComObject(CLASS_GifAnimator)) as IGifAnimator;
全代码如下:
(在线等)


uses Windows, Messages, Graphics, ActiveX, ComObj;

const
  IID_IGifAnimator: TGUID = '{0C1CF2DF-05A3-4FEF-8CD4-F5CFC4355A16}';
  CLASS_GifAnimator: TGUID = '{06ADA938-0FB0-4BC0-B19B-0A38AB17F182}';


  IRichEditOle = interface(IUnknown)
  ['{00020d00-0000-0000-c000-000000000046}']


function InsertGif(hRichEdit: THandle; const FileName: string): Boolean;
var
  ReOle: IRichEditOle;
  OleSite: IOleClientSite;
  Storage: IStorage;
  LockBytes: ILockBytes;
  OleObject: IOleObject;
  ReObj: TReObject;
  Animator: IGifAnimator;
begin
  ReOle := GetRichEditOle(hRichEdit);
  Assert(ReOle <> nil, 'RichEditOle is null!');
  Assert(FileName <> '', 'FileName is null!');

  ReOle.GetClientSite(OleSite);

  OleCheck(CreateILockBytesOnHGlobal(0, True, LockBytes));
  Assert(LockBytes <> nil, 'LockBytes is null!');

  OleCheck(StgCreateDocfileOnILockBytes(LockBytes,
  STGM_SHARE_EXCLUSIVE or STGM_CREATE or STGM_READWRITE, 0, Storage));
  Assert(Storage <> nil, 'Storage is null!');

Animator := IUnknown(CreateComObject(CLASS_GifAnimator)) as IGifAnimator; Animator.LoadFromFile(PWideChar(WideString(FileName)));
  OleCheck(Animator.QueryInterface(IID_IOleObject, OleObject));

  OleCheck(OleSetContainedObject(OleObject, True));
  FillChar(ReObj, Sizeof(ReObj), 0);
  ReObj.cbStruct := Sizeof(ReObj);
  OleCheck(OleObject.GetUserClassID(ReObj.clsid));
  ReObj.cp := REO_CP_SELECTION;
  ReObj.dvaspect := DVASPECT_CONTENT;
  ReObj.dwFlags := REO_STATIC or REO_BELOWBASELINE;
  ReObj.dwUser := 0;
  ReObj.poleobj := OleObject;
  ReObj.polesite := OleSite;
  ReObj.pstg := Storage;
  ReObj.sizel.cx := 0;
  ReObj.sizel.cy := 0;

  ReOle.InsertObject(ReObj);
  Result := True;
end;

[解决办法]
com对象没有注册,找到com组件所在文件注册一下就行了
[解决办法]
看看附带的dll文件或ocx文件,一般以这个形式存在

热点排行