loadfromstream()抛出OLE错误800A01E1



我必须加载一个jpeg文件到OleGrafic。当我调用OleGraphic.LoadFromStream()时,它会抛出OLE Error 800A01E1.

我试图识别这个错误,但没有成功。与ole错误相关的最接近的答案是所有ole错误代码的列表,但我在那里找不到800A01E1。

我还尝试以主形式初始化Ole。与产生此错误的形式相同。没有成功。

initialization
  OleInitialize(nil);
finalization
  oleuninitialize;

@ Remy Lebeau:此代码在其他项目中正常工作:

sFileName := OPD.FileName; 
      OleGraphic := TOleGraphic.Create; 
      fs := TFileStream.Create(sFileName, fmOpenRead Or fmSharedenyNone);
     // fs.Seek(0,soFromBeginning);// := 0;  Here I  tried to make sure it's o.
      OleGraphic.LoadFromStream(fs);
      Source := TImage.Create(Nil);
      Source.Picture.Assign(OleGraphic);
      SrcBild := TBitmap.Create; 
      SrcBild.Width := Source.Picture.Width;
      SrcBild.Height := Source.Picture.Height;
      SrcBild.Canvas.Draw(0, 0, Source.Picture.Graphic);
      DstBild := TBitmap.Create;
      DstBild.Width := 200;
      DstBild.Height := 100;
      SmoothResize(SrcBild, DstBild);

SmoothResize来自http://www.swissdelphicenter.com/torry/showcode.php?id=1896

我不能告诉你为什么这个图像无法加载,但是我可以告诉你这个错误代码的名字,以及如何在将来找到这样的代码。

Windows中的8位十六进制exception/hresult错误码通常可以通过前缀0x来查找,在这种情况下给出0x800A01E1

一个简单的搜索告诉我,该错误代码的名称是ctle_invalidpicture,结果也列在底层Win32函数,OleLoadPictureFile:

Return value
This method returns standard COM error codes in addition to the following values.
Return code           Description
S_OK                  The method completed successfully.
CTL_E_INVALIDPICTURE  Invalid picture file.

当然,这也不能告诉您哪里出错了,但至少您现在知道可能的源是文件的实际内容。

由于该函数的文档还列出了有效的文件格式,我的猜测是首先确保文件是这些格式之一,而不仅仅是一些其他图像文件(或随机数据)伪装成JPEG或在不正确的文件名下的东西,然后尝试将该文件加载到其他一些程序中。也许你甚至可以加载并保存文件在一些工具,可以重写图像文件的内容,可能会修复它。

TOleGraphic.LoadFromStream()内部使用OleLoadPicture()。根据它的文档:

流必须为BMP(位图)、WMF(元文件)或ICO(图标)格式。

即不支持JPG格式

最新更新