读书人

Project Project1.exe raise excepti

发布时间: 2012-05-22 18:18:54 作者: rapoo

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文件,一般以这个形式存在

读书人网 >.NET

热点推荐