我这个利用delphi制作dll的写的对吗?

来源:百度知道 编辑:UC知道 时间:2024/06/05 00:45:52
library jpgtobmp;
uses
SysUtils,
Graphics,
Jpeg,
Classes;
{$R *.res}
function bmpfromjpg(jpgf: string): Tbitmap;stdcall;
var
jpg:Tjpegimage;
begin
jpg:=Tjpegimage.Create ;
result:=Tbitmap.Create ;
try
jpg.LoadFromFile(jpgf);
jpg.DIBNeeded ;
result.Assign(jpg);
finally
jpg.Free ;
end ;
end;
exports
bmpfromjpg;
end.
可为什么在另一个程序调用这个DLL中的函数时出现运行时错误‘cannot a assign a tbitmap to a tpicture'.而我直接用这个函数(不通过DLL)时却实现了程序的功能?
LiWei_2008 说的可能是问题的原因,但“BMPf是输出的BMP文件名”费解,怎么输出呀,同时函数的返回值为integer.那么 result:=Tbitmap.Create ; 句将怎么存在?亲自做一下吗。

而 ototing写的连参数都没有,根本不具通用性。
仍感谢二位。是不是这个问题就无法解决了?……

唉,这样都行了,难道加个参数就不行?不是一样的嘛:
library jpgtobmp;
uses
SysUtils,
Graphics,
Jpeg,
Classes;
{$R *.res}
function bmpfromjpg(jpgf: string): Tbitmap;stdcall;
var
jpg:Tjpegimage;
begin
jpg:=Tjpegimage.Create ;
result:=Tbitmap.Create ;
try
jpg.LoadFromFile(jpgf);
jpg.DIBNeeded ;
result.Assign(jpg);
finally
jpg.Free ;
end ;
end;
exports
bmpfromjpg;
end.

调用的句子:
var
Form1: TForm1;
function bmpfromjpg(jpgf: string): Tbitmap;stdcall;external 'jpgtobmp.dll';
......
procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Picture.Bitmap:=bmpfromjpg('1.jpg');
end;

在winXP+delphi7下成功看到了1.jpg

返回值的问题,Tbitmap不是通用的数据类型,你可以用这个函数返回一个bmp文件,然后再程序中调用这个文件就行了.
function bmpfromjpg(jpgf: string;BMPf:string): integer;stdcall;
返回值标识转换是否成功.
BMPf是输出的BMP文件名.