程序中的一函数,原来放在程序一单元中,运行没有问题,但把它封装到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中就出错,而在远程序单元中没有问题?
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中就出错,而在远程序单元中没有问题?
但是不行,问题不在这
只有TBlobField(AField)一句是强类型转换的,检查检查吧
问题在哪呢?