InstallShield

来源:互联网 发布:2016最新伤感网络歌曲 编辑:程序博客网 时间:2024/04/30 00:07
InstallShield 的功能相当强大,能够对系统和安装需要提供丰富的函数支持,有足够灵活的界面控制支持,而且其脚本语言特点与Visual C++的代码极其相似,非常适合使用Visual C++的开发者使用。

---- 但是,在某些情况下,InstallShield不能提供能完成某种特殊功能的相应函数,这时需要我们自己开发出能够完成此功能的函数,然后放在InstallShield中调用,达到与其完美的结合,DLL是最佳的选择。

---- 本文以一个实例介绍了如何生成自己的DLL,以及如何在 InstallShield中调用。

一、制作DLL:

---- 此动态库函数主要是显示出传给自己的字符串,并做了改动返回(如果要在InstallShield中使用改动过的字符串,在InstallShield中原型声明时,用POINTER对应LPSTR),并且根据传入的数据返回不同的返回值,用户只要根据此原理实现自己的函数即可:

---- 1、在Visual C++中的 New 中选择 MFC AppWizard(DLL) 工程类型,输入工程名Setup00,点OK,直接 Finish 即可。然后在ClassView中,用鼠标右击Csetup00App,选择Add Member Function…,在Function Type中输入int,在Function Declaration中输入Test(LPSTR lpszStr, int iVal),Access类型选择Public,然后输入下面函数体。 Setup00.DLL的Test函数例码:

int CSetup00App::Test(LPSTR lpszStr, int iVal)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());
   AfxMessageBox(lpszStr);
   //如果想改变字符串,用下面方法
   strcpy(lpszStr,_T("动态库已经变了字符串"));
   if (iVal == 1)
       return 1;
   else
       return 2;
}

---- 2、在FileView中,从Source Files中双击 Setup00.def,在代码; Explicit exports can go here的下一行输入: Test @1
---- 3、选择成Release版本,从 Build 菜单上选择 Build Setup00.dll即可。

二、在 InstallShield 中使用实例:

---- 1、在 Setup Files Pane 中的 Language Independent\Operating System Independent下用 Insert Files 命令添入 Setup00.dll 。这样,你的动态库就可以在制作安装盘时被压入 _user1.cab 中,

---- 如果你没有把DLL放至_user1.cab中,你可以把DLL和你的应用程序放到一块,然后从目标系统中调用。但是,如果你已经做了,你必须指明你要使用的DLL的位置以使安装程序能够找到。而且你必须确信在调用DLL之前它已经被拷贝到预定目录之下。

---- 2、在脚本程序的程序段中,添加下面代码:

  // 声明setp00.dll中的Test函数原型:
  prototype INT Setup00.Test( STRING,INT);

---- //如果想要在DLL中改变字符串值,需要将STRING声明成按指针传递,如下:
//prototype INT Setup00.Test( BYREF STRING,INT);

  STRING szDLL, svString;
  INT   nValue;
  POINTER psvString;
  BOOL   bDone;
  NUMBER nResult;

program
  szDLL = DLL_FILE;
/*--------------------------------------*\
* Load SETUP00.DLL into memory.
\*--------------------------------------*/
  nResult = UseDLL (szDLL);
  if (nResult = 0) then
    MessageBox ("动态库调入内存成功!", INFORMATION);
  else
    MessageBox ("动态库调入内存失败!", INFORMATION);
    abort;
  endif;
    AskText("请输入示例字符串:", "这是示例字符串", svString);
    nValue = StrLength(svString);
    nResult = Test(svString,nValue);

    // 显示调用Setup00.dll中Test函数后的字符串
    SprintfBox(INFORMATION, "调用动态库", "
    调用后的字符串为:%s ", svString);
if (UnUseDLL (szDLL) < 0) then
           MessageBox("卸载动态库失败,仍在内存中!", SEVERE);
    else
           MessageBox("从内存中卸载动态库成功!",
          INFORMATION);

      endif;

原文地址:http://blog.sina.com.cn/s/blog_56f9f160010005ce.html

0 0
原创粉丝点击