Inno Setup入门(15)—DLL外部库调用

Inno Setup入门(15)—DLL外部库调用

ID:47886027

大小:73.87 KB

页数:4页

时间:2019-08-07

Inno Setup入门(15)—DLL外部库调用_第1页
Inno Setup入门(15)—DLL外部库调用_第2页
Inno Setup入门(15)—DLL外部库调用_第3页
Inno Setup入门(15)—DLL外部库调用_第4页
资源描述:

《Inno Setup入门(15)—DLL外部库调用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、这里讲讲如何调用dll中的函数。先来一个简单的例子:[code]varmyPage:TWizardPage;Button:TNewButton;Cnt:Integer;functionGetCurrentProcessId():Integer;external'GetCurrentProcessId@C:WindowsSystem32kernel32.dll';procedureButtonOnClick(Sender:TObject);begin MsgBox(IntToStr(GetCurrentProcessId()),mbInformation,mb_Ok); end;p

2、rocedureInitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome,'标题:自定义页面','描述:这是我的自定义页面');Button:=TNewButton.Create(mypage);Button.Width:=ScaleX(75);Button.Height:=ScaleY(23);Button.Caption:='TNewButton';Button.OnClick:=@ButtonOnClick;Button.Parent:=mypage.Surface;end;运行效果如下:语句:functionGetCu

3、rrentProcessId():Integer;external'GetCurrentProcessId@C:WindowsSystem32kernel32.dll';申明了引用dll的文件、函数和定义的函数。许多程序在安装过程中,会有升级的可能,但是又有个问题就是,当前的程序正在运行,这样就不能达到升级的效果,因此有必要坚持并能够结束指定程序的过程,如何在安装包中实现呢?其实很简单,就是调用dll,关于dll,可以用C++或者VB编写,个人推荐用C++,这样编写的dll文件似乎在数据类型上能够和pascal更好地融合,代码很简单,这里我就不啰嗦了,把重点集中到调用上,下面是一

4、个例子:[code]var  myPage:TWizardPage;  Button:TNewButton;functionGetPIDByName(pname:string):Integer;external'GetPIDByName@F:CollInnoKP.dllcdeclsetuponly';  functionKillProcess(pid:DWORD):Integer;external'KillProcess@F:CollInnoKP.dllcdeclsetuponly';  procedureButtonOnClick(Sender:TObject);begi

5、n  KillProcess(GetPIDByName('qq.exe'));end;procedureInitializeWizard();begin  myPage:=CreateCustomPage(wpWelcome,'标题:自定义页面','描述:这是我的自定义页面');  Button:=TNewButton.Create(mypage);  Button.Width:=ScaleX(75);  Button.Height:=ScaleY(23);  Button.Caption:='TNewButton';  Button.OnClick:=@ButtonOnClick; 

6、 Button.Parent:=mypage.Surface;end;程序中引入了KP.dll中的两个函数,分别是通过进程名称获取其pid,以及结束指定pid的进程,在这个例子中,点击按钮就会结束QQ的进程。请注意调用过程如果写的函数没自己处理好堆栈问题,则必须使用cdecl 方式,而不是默认方式的stdcall,否则可能会出现如下错误: 这就是调用方式不对造成的结果,这一点需要格外留心。概述前面分两节介绍了如何使用dll,这里将对调用外部或者系统dll做一些综述。Pascal脚本能调用外部dll(标准Win32API或者各程序员编写的dll)中的函数,在调用外部dll中的函数前,需要

7、声明所调用的函数原型,使用external声明dll文件,对于一个Pascal描述的函数原型,例如functionA(B:Integer):Integer;可以有三种方式调用:方法一:functionA(B:Integer):Integer;external'< dll中函数名称> >@< dll文件路径 >';方法二:functionA(B:Integer):Integer;external'< dll中函数名称> >@< dll文件路径 >

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。