DLL资源包中的AVI如何调用-在线等... ( 积分: 300 )

  • 主题发起人 主题发起人 go_huang
  • 开始时间 开始时间
G

go_huang

Unregistered / Unconfirmed
GUEST, unregistred user!
我把AVI等资源打包到Resource.DLL中,程序中调用。
我的调用方法如下,不行。其他的像JPEG可以。
try
AHinst:=Loadlibrary(Resource.Dll);
If AHinst=0 Then Exit;
ANI.ResHandle:=AHinst;
ANI.ResHandle:=hinstance;
ANI.ResName:='AVI_ALL_SEARCH';
ANI.Active:=true;
finally
FreeLibrary(AHinst);
end;
我的信箱:leon.huang@163.com
 
我把AVI等资源打包到Resource.DLL中,程序中调用。
我的调用方法如下,不行。其他的像JPEG可以。
try
AHinst:=Loadlibrary(Resource.Dll);
If AHinst=0 Then Exit;
ANI.ResHandle:=AHinst;
ANI.ResHandle:=hinstance;
ANI.ResName:='AVI_ALL_SEARCH';
ANI.Active:=true;
finally
FreeLibrary(AHinst);
end;
我的信箱:leon.huang@163.com
 
try
AHinst:=Loadlibrary(Resource.Dll);
If AHinst=0 Then Exit;
try
ANI.ResHandle:=AHinst;
except
end;
try
ANI.ResHandle:=hinstance;
except
end;
try
ANI.ResName:='AVI_ALL_SEARCH';
except
end;
ANI.Active:=true;
finally
FreeLibrary(AHinst);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var AHinst:THandle;
ResName:^String;
begin
try
AHinst:=Loadlibrary('Resource.Dll');
if AHinst=0 Then Exit;
ResName:=@Animate1.ResName; //add
ResName^:='AVI_ALL_SEARCH'; //add
ANI.ResHandle:=AHinst;
ANI.ResName:='AVI_ALL_SEARCH';
ANI.Active:=true;
finally
//FreeLibrary(AHinst); //暂时不能释放
end;
end;
 
To:独帅
在DLL中行不通,在主工程里面,
{$R *.res}
{$R AVI2GENERAL.RES}
这样可以。
关键是我要在Resource.dll中加载,其他地方调用Resource.DLL
 
TO:TYZhang
老兄,不要难为我,不释放怎么办?我就是为了节约内存才这样做的。
而且,这个窗体时在较多的地方调用的,就像一个查询等待的窗口那样,如何释放呢?
这样说来在该FORM释放的时候都不可以释放。总不能在释放该FORM所在的工程的时候,Resource.DLl
才释放吧。
 
to go_huang:
在该form释放的时候,可以释放,但是在button的click事件中绝对不能释放。
 
To:TYZhang
多谢。
是这样的,使用资源的那个FORM在很多地方都回调用,有点像一个查找等待窗口这样子。
可能该窗口会被多个地方同时调用,如果我在FORM的Destroy中释放的话,可能还没有释放,其他地方又要引用该窗口执行那一段程序,会不会存在Resoure.Dll被多次创建的情况,还有,如果别的窗口正在使用,释放会不会出问题?
 
你把AHinst:=Loadlibrary('Resource.Dll');放到这个form的oncreate事件中,
将FreeLibrary(AHinst); 放到form的ondestroy事件中就可以了。
 
我看错了:(
TYZhang说得对,把AHinst:=Loadlibrary('Resource.Dll');放到这个form的oncreate事件中,将FreeLibrary(AHinst); 放到form的ondestroy事件中就可以了。
在用的时候不用先Loadlibrary再FreeLibrary
如果该Form被多次调用,windows会自动管理Loadlibrary与FreeLibrary,不会重复生成多个Resoure.Dll,只是改变对Resoure.Dll的引用记数
 
我看看,我这里情况比较特殊,不知道是否可行。
 
To:TYZhang
定义的指针如何释放呢?
我看了一下,如果同时执行多个该FORM的时候,就会提示:
Access voilation at address 400F19DD in module vcl60.bpl. Read of address 000002EC
 
什么指针?
还有你是如何调用的这个form的,建议不要每次调用都create/free,不知你是如何调用的,理论上不应该出错。
 
大哥,这个都要问?我早都作过了!
程序发给你了,去E_Mail收去。

记住发分哦
 
joesu的例子不错。
多谢了,结贴
 
后退
顶部