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

  • 主题发起人 主题发起人 ynfly
  • 开始时间 开始时间
Y

ynfly

Unregistered / Unconfirmed
GUEST, unregistred user!
我的一个应用,调用了一个自己写的dll,发现在每调用一次,系统资源就减少差不多1%,
大约一百次以后,系统出现错误,提示为:
Exception EoutofResources in module Acs.dll at 0001855E
Acs.dll就是我写的dll
我开始认为是dll中有部分资源没有释放干净,但后来发现只要关闭整个应用后系统资源又
全部释放了,我已经没办法了,请救我. 如果是dll中有未被释放的资源,那该如何释放呢
 
关键是你是如何调用的?
你不能每次要用到dll中的某个函数都加载一次dll,
这样当然会系统资源越来越少。
 
我是在一个应用中静态的调用dll,先声明此dll中的所有函数,然后再调用这些函数,应该跟调用系统的dll
一样的,这样有错吗?
 
把你调用的代码贴出来看看。
或者发到wrlmmmp@263.net(发文本就行了,我这里没有delphi)
 
to ynfly
我也遇到了与你相同的问题,不知道你解决了没有,请告之,谢谢!
 
光说没有代码如何看问题
 
关注。///
 
to pcexplorer
再我的程序中要调用大量的图片,我把图片作成资源文件放到了动态连接库里再程序中调
用动态连接库中的图片,可我在程序中点击按扭更换图片几十次以后,系统出错
提示为 canvas does not allow drawing
我调用图片的函数为
function loadbmp(h:Thandle;str:string):Tbitmap;
var //从动态库里取出位图资源自定义函数
bit:Tbitmap;
begin
bit:=Tbitmap.Create;
bit.Handle:=loadbitmap(h,pchar(str));
loadbmp:=bit;
end;
hand:=loadlibrary('chnbmp.dll');
image1.Picture.graphic :=loadbmp(hand,myfile+'sback');
我的程序里有大量的的BMP图片要调用,不知是什么原因?请指教。谢谢
 
Tbitmap 没有free?
 
function loadbmp(h:Thandle;str:string):Tbitmap;
var //从动态库里取出位图资源自定义函数
bit:Tbitmap;
begin
bit:=Tbitmap.Create;
bit.Handle:=loadbitmap(h,pchar(str));
loadbmp:=bit;
bit.Free; ////加入此行即可[:)]
end;
hand:=loadlibrary('chnbmp.dll');
image1.Picture.graphic :=loadbmp(hand,myfile+'sback');
 
[code<a href="http://www.delphibbs.com">大富翁论坛</a>[/code]
 
建议用BoundCheck检查一下内存泄漏和资源泄漏情况。我也在作图象处理构件,每次打开图片
就增加内存5MB,我就是用这个工具检查出来的。
 
to zl
你试过了吗,我加上就出错,你在试试

to deadcandance
你好,怎么用boundcheck呀,请教
 
有没有高手知道问题出在哪里了,请指教!!!!!!!!!!!!!
 
[?]
这个问题这么难吗?难道真的没有人能够解决吗????[red][/red]
 
我的想法是把bit:TBitmap作为一个全局变量在initialize的时候create,而不是在函数中
create,这样就避免了每次调用都要create一个bitmap对象。不知道可不可以?
 
bitmap是tbitmap
加入以下两句试试
bitmap.Dormant;
bitmap.FreeImage;

 
function loadbmp(h:Thandle;str:string):Tbitmap;
var //从动态库里取出位图资源自定义函数
bit:Tbitmap;
begin
bit:=Tbitmap.Create;
bit.Handle:=loadbitmap(h,pchar(str));
loadbmp:=bit;
bit.Free; ////加入此行即可
end;
hand:=loadlibrary('chnbmp.dll');
image1.Picture.graphic :=loadbmp(hand,myfile+'sback');
这样是不对,因为你在free的时候同时会将loadbmp释放掉了,
如果你的这段程序不是在dll中,可以试着将bit:Tbitmap; 定义为全局,也许可以。
但最好将原码发过来看看,这里主要是Free的问题。


 
后退
顶部