说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Dll函数问题

编辑:说三道四文库 发布时间:2018-06-23 05:16
HTML文档下载 WORD文档下载 PDF文档下载
程序中的一函数,原来放在程序一单元中,运行没有问题,但把它封装到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中就出错,而在远程序单元中没有问题?
procedure FillImage(AField: TField; img: TImage); stdcall;
没错,声明部分是用的:procedure FillImage(AField: TField; img: TImage); stdcall;
但是不行,问题不在这
根据出错信息,应该是类类型转换的错
只有TBlobField(AField)一句是强类型转换的,检查检查吧
但在程序单元中不会出错,放在DLL中才报错
问题在哪呢?
UP
哪位能帮帮忙?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘