注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

Inno Setup入门(二十八)——使用dll(2)  

2012-07-15 22:28:53|  分类: Inno Setup |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
许多程序在安装过程中,会有升级的可能,但是又有个问题就是,当前的程序正在运行,这样就不能达到升级的效果,因此有必要坚持并能够结束指定程序的过程,如何在安装包中实现呢?其实很简单,就是调用dll,关于dll,可以用C++或者VB编写,个人推荐用C++,这样编写的dll文件似乎在数据类型上能够和pascal更好地融合,代码很简单,这里我就不啰嗦了,把重点集中到调用上,下面是一个例子:

[code]
var
    myPage:TWizardPage;
    Button :TNewButton;
function GetPIDByName(pname:string):Integer;
external 'GetPIDByName@F:\Coll\Inno\KP.dll cdecl setuponly';   

function KillProcess(pid:DWORD):Integer;
external 'KillProcess@F:\Coll\Inno\KP.dll cdecl setuponly';   

procedure ButtonOnClick(Sender: TObject);
begin
    KillProcess(GetPIDByName('qq.exe'));
end;

procedure InitializeWizard();
begin
    myPage:=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;

程序中引入了KP.dll中的两个函数,分别是通过进程名称获取其pid,以及结束指定pid的进程,在这个例子中,点击按钮就会结束QQ的进程。请注意调用过程如果写的函数没自己处理好堆栈问题,则必须使用 cdecl 方式,而不是默认方式的stdcall,否则可能会出现如下错误:
Inno Setup入门(二十八)——使用dll(2) - Castor - 趁年轻,多折腾
 这就是调用方式不对造成的结果,这一点需要格外留心。
  评论这张
 
阅读(2655)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016