程序中的一函数,原来放在程序一单元中,运行没有问题,但把它封装到DLL库中后出现报错。各位高手帮忙看看是哪的问题?procedure FillImage(AField: TField; img: TImage);
var
  Header: array[0..9] of Char;
begin
  if (not AField.IsBlob) then
  begin
    img.Picture.Bitmap.FreeImage;
    exit;
  end else if (TBlobField(AField).IsNull) or (TBlobField(AField).BlobSize=0) then
  begin
    img.Picture.Bitmap.FreeImage;
    exit;
  end;  with TADOBlobStream.Create(TBlobField(AField), bmRead) do   ///// 报错
  try
    Position:=0;
    ReadBuffer(Header,10);
    if (Header[0]='B') and (Header[1]='M') then
    begin
      SaveToFile('temp.bmp');
      img.Picture.LoadFromFile('temp.bmp');
    end;
    if (Header[0]='G') and (Header[1]='I') and (Header[2]='F') then
    begin
      SaveToFile('temp.gif');
      img.Picture.LoadFromFile('temp.gif');
    end;
    if (Header[6]='J') and (Header[7]='F') and (Header[8]='I') and (Header[9]='F') then
    begin
      SaveToFile('temp.jpg');
      img.Picture.LoadFromFile('temp.jpg');
    end;
  finally
    Free;
  end;
end;
在TADOBlobStream.Create(TBlobField(AField), bmRead)时候报错,"Invalid class type cast"
为什么转到DLL中就出错,而在远程序单元中没有问题?

解决方案 »

  1.   

    procedure FillImage(AField: TField; img: TImage); stdcall;
      

  2.   

    没错,声明部分是用的:procedure FillImage(AField: TField; img: TImage); stdcall;
    但是不行,问题不在这
      

  3.   

    根据出错信息,应该是类类型转换的错
    只有TBlobField(AField)一句是强类型转换的,检查检查吧
      

  4.   

    但在程序单元中不会出错,放在DLL中才报错
    问题在哪呢?