动态调用DLL可以得到句柄,但
静态调用DLL时,得到句柄?
静态调用DLL时,得到句柄?
解决方案 »
- 如何在delphi7中直接调用IE打开对应网址?
- 昨天开贴没问出答案,今天再来开一贴. 关于这类项目管理类软件如何做?
- 如何取得另外一个应用程序中DBGrid的内容。
- 如何用Delphi把中文字符转换成ASCII码的16进制?
- Unit2如何调用Unit1中的自定义过程?
- TMD,BDE的QUERY连接数据库老是弹出登陆框?如何除掉??
- (求救啊)---怎么样在一个网段广播自己机器上的屏幕操作??
- 四舍五入的函数是什么???
- TDatabase的AliasName的问题,在线等 100分送
- 就55分了,问个问题,关于mediaplayer的!
- 一直没有散过分...今儿凑一热闹....可用分都6000多
- 如何打包dll
首先介绍装载时DLL的调用: (1)装载时调用DLL 在调用DLL的Pas文件中,对DLL函数进行外部声明,
声明应位于Implementation的Uses语句后,形式如下: Implementation Uses Dialogs; Function Name(argment):Boolean;far;External 'CallName'; 其中External关键字后面的引号内的字串是DLL的文件名。
声明以后即可在Pas文件任何地方引用DLL函数。 装载时调用DLL的优点是速度较快,程序间也可共享代码。 (2)运行时调用DLL DLL的另一种调用方法是在运行时调用。
要调用到Windows的API函数:LoadLibrary,GetProcAddress等。
主要用于调用DELPHI和其它语言,特别是C++编译的DLL。 假定你的DLL包括一个函数: Function MyFunc(aparam:word):string;export; 首先在程序Type类型声明处加入一句: Type
TMyfunc = function(aparam:word):string; 此句的作用如同C++中声明的函数指针。 然后定义如下变量∶ Var
aptr:TFarproc;
lhnd:THandle;
s:string; 其中Aptr,lhnd两变量声明必须有,s是DLL函数返回值,视情况而定。 在调用DLL处加入如下语句进行DLL装载:
lhnd:=Loadlibrary('路径:DLL文件名');{如lhnd:=Loadlibrary('c:\aa\bb.dll');
aptr:=GetprocAddress(lhnd,'Myfunc'); 下面可直接调用DLL了:
s:=TMyfunc(bptr)(60);{根据函数填相应的变量参数} 调用完以后,用FreeLibrary释放DLL占用的内存:
FreeLibrary(lhnd);
但静态调用DLL如何得到其句柄?
var
Stream:TResourceStream;
MyJpg: TJpegImage;
h: THandle;
begin
Stream:=nil;
MyJpg:=nil;
h:=0;//H存放的是句柄.
Try
h := LoadLibrary(Pchar(ExtractFilePath(Application.ExeName)+'dll\Ytdll.dll'));
if h <>0 then
Begin
Stream := TResourceStream.Create (H,str,RT_RCDATA) ;
try
MyJpg:=TJpegImage.Create;
MyJpg.LoadFromStream (Stream) ;
finally
MYJPG.FREE;
end;
end;
Finally
Stream.Free;
FreeLibrary(h);
end;
end;
你用的是LoadLibrary和
FreeLibrary
这不是动态装载DLL吗?
LPCTSTR lpModuleName // module name
);