zoukankan      html  css  js  c++  java
  • Inno Setup入门(二十八)——使用dll(2)

    许多程序在安装过程中,会有升级的可能,但是又有个问题就是,当前的程序正在运行,这样就不能达到升级的效果,因此有必要坚持并能够结束指定程序的过程,如何在安装包中实现呢?其实很简单,就是调用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 - 趁年轻,多折腾
     这就是调用方式不对照成的结果,这一点需要格外留心。
     

    转自:http://www.360doc.com/content/13/0327/14/4221543_274237000.shtml

  • 相关阅读:
    Servlet笔记2--模拟Servlet本质、第一个Servlet程序、将响应结果输出到浏览器中
    Servlet笔记1--概述
    Spring笔记13--SSH--全注解开发
    Spring4笔记12--SSH整合3--Spring与Struts2整合
    Spring4笔记11--SSH整合2--SpringWeb
    Spring4笔记10--SSH整合1--Spring与Hibernate整合
    局部变量表
    阿里云centos7使用yum安装mysql的正确姿势
    shell parameter
    maven 坐标
  • 原文地址:https://www.cnblogs.com/xiurui12345/p/3096608.html
Copyright © 2011-2022 走看看