如何通过程序动态加载.DLL文件,如何卸载.DLL,卸载后有可以随时加载
解决方案 »
- delphi中,actionlist原有的datasetinsert的源码可以自己编辑一下吗,谢谢
- 这样的思路怎么实现?
- 急用! Delphi中使用ADOQUERY插入数据时能不能把两句INSERT同时执行
- ***fastreport2.52/2.53的严重bug,请高手修改源代码****
- 非典的三条药方,供大家预防,
- 急用!!
- 不想让用户直接操作数据库/可以怎么办,用户需用在DBGRID输入数据
- 高手止步!d5中,有图片做背景的form尺寸变化时非常闪!有没有办法减小闪烁。
- 如何CAPTURE FORM,要带CAPTION?
- 我想找一个类似OICQ/GICQ...的程序...
- 请教高手,bde 如何得到数据库连接中断(数据库down或网络连接中断)?
- 在线等待,一个关于查询的问题
动态加载:需要三个函数loadlibrary、Getprocess、Freelibrary即可.
cb调用dll,type __fastcall type...cb建立dll
delphi调用dll,function...: type; cdecl;谁知道vc开发的dll,调用时用什么修饰?
结束时释放。
//DLL申明UNIT dllclear.pas
unit dllclear;interfaceuses
Windows, SysUtils, hydeclear, libcs;type
Thyclient = Record
libload:Boolean;
connected:Boolean;
hyclient:THandle;
apSendstrToHost:TFarproc;
apConnectToHost:TFarproc;
apDisConnectToHost:TFarproc;
apNetWatchOption:TFarproc;
end;type
TNetWatchOption = function ():boolean;
TSendstrToHost = function (sendstr:string):boolean;
TConnectToHost = function ():boolean;
TDisConnectToHost = function ():boolean;
Function HyClientInit:boolean;
Function HyClientDestroy:boolean;var
hyclient:Thyclient;implementationFunction HyClientInit:boolean;
begin
try
hyclient.hyclient:=Loadlibrary('hyclient.dll');
hyclient.apNetWatchOption:=GetprocAddress(hyclient.hyclient,'NetWatchOption');
hyclient.apSendstrToHost:=GetprocAddress(hyclient.hyclient,'SendstrToHost');
hyclient.apConnectToHost:=GetprocAddress(hyclient.hyclient,'ConnectToHost');
hyclient.apDisConnectToHost:=GetprocAddress(hyclient.hyclient,'DisConnectToHost');
if hyclient.hyclient>0 then
begin
hyclient.libload:=True;
Result:=True;
end
else
begin
hyclient.libload:=False;
hyclient.connected:=False;
Result:=False;
end;
except
Result:=False;
end;
end;Function HyClientDestroy:boolean;
begin
try
FreeLibrary(hyclient.hyclient);
hyclient.libload:=False;
hyclient.connected:=False;
Result:=True;
except
Result:=False;
end;
end;end.主程序调用
procedure Form.OnCreate(Sender:TObject);
begin
if fileexists('hyclient.dll') then
begin
if not HyclientInit then
ShowError('网络监测库初始化失败!');
end;
end;procedure Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if hyclient.libload then
hyclientdestroy;
end;