我的一个应用,调用了一个自己写的dll,发现在每调用一次,系统资源就减少差不多1%,大约一百次以后,系统出现错误(100分)

  • 主题发起人 主题发起人 ynfly
  • 开始时间 开始时间
function loadbmp(h:Thandle;str:string):Tbitmap;
var //从动态库里取出位图资源自定义函数
bit:Tbitmap;
begin
bit:=Tbitmap.Create;
bit.Handle:=loadbitmap(h,pchar(str));
loadbmp.Assigned(bit); //改改这行
bit.Free;
end;
 
源码没有怎么看?
 
TO SAVENINGTH
你要什么原码
 
显然函数返回一个局部类变量是错误的,至少要在堆上分配内存,然后释放。
type
PbitMap = ^TBitMap;
var
ptrb: PBitMap;
begin
New(ptrb);
ptrb^ := TBitMap.Create;
ptrb^.Handle := Loadbitmap(handle,'bmp');
result := ptrb; //最后在使用完后必须调用 Dispos(ptrb);
end;
 
位图变量不用释放,让loadbmp传回TBitmap的句柄,将该句柄赋值给image1.picture.bitmap.handle
让image1自己管理该资源。

function loadbmp(h:Thandle;str:string):THandle;
var
bit:Tbitmap;
begin
bit:=Tbitmap.Create;
bit.Handle:=loadbitmap(h,pchar(str));
loadbmp:=bit.handle;
end;

hand:=loadlibrary('chnbmp.dll');
image1.Picture.bitmap.handle := loadbmp(hand,myfile+'sback');
 
谢谢你阿魁,我的问题已解决,可我不知道怎样给你分。
谢谢各位的帮助,祝大家快乐。
 
不用客气 [:)]

要不,你再开一个帖子,我来跟 [^][:D]
 
我将我以前的一个帖子提前吧,把那里的分给你好不??帖子名为

在程序中屏蔽掉IE的右键弹出菜单,并添加上自己的菜单实现自定的功能
 
no pains,no gains
 
这样应该也行,我没试过,有兴趣自己试吧。


function loadbmp(h:Thandle;str:string):THandle;
var
bit:Tbitmap;
begin
bit:=Tbitmap.Create;
bit.Handle:=loadbitmap(h,pchar(str));
loadbmp:=bit.handle;
end;

改为

function loadbmp(h:Thandle;str:string):THandle;
begin
try
loadbmp := loadbitmap(h,pchar(str));
except
on e:Exception do
begin
//handle the exception
loadbmp := nil;
end;
end;
end;
 
你的bit创建以后没有释放。
 
什么时候FREElibrary的?
你不能只加载DLL不释放呀
 
to zhukewen:
你只看到了一点
 
不好意思,是因为在acs.dll中使用了一个从网常下载的LED控件的原因,是LED控件的问题
 
后退
顶部