InstallShield6.x调用由C++创建的DLL函数

原创 2004年02月18日 11:06:00

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处http://xinyistudio.vicp.net/和作者信息及本声明

 

原因

――――――――――――――――――――――――――――――――

最近,在写InstallShield6.x的脚本时给我带来了一些问题,在验证用户输入的序列号过程中,需要比较输入的字符串,InstallShield6.x在对字符串比较的时候是不区分大小写的(即大小写不敏感),因而,无法判断用户的输入是否合法,相信有许多人也遇到过这样的问题。

 

解决

――――――――――――――――――――――――――――――――

引用DLL中的某个函数来验证用户的输入是否合法,要说明的是这里生成的DLL是基于C++C语言编译,在这里我采用了VC++作为DLL的开发环境。基本的思路:编写由InstallShield调用的DLL,名称StrCompare.dll,要导出的函数名称StrComp,用StrComp对两个字符串中的对应字符进行比较,并区分字符的大小写。StrComp代码如下:

 

_declspec(dllexport) BOOL APIENTRY StrComp(HWND hWnd, LPSTR str1, LPSTR str2)

{

       if ( hWnd == NULL || str1 == NULL || str2 == NULL )

       {

              MessageBox(NULL, "输入参数错误!", "错误信息", MB_OK|MB_ICONERROR);

              return FALSE;

       }

      

       if ( strcmp(str1, str2) == ERROR_SUCCESS )  // strcmp可以区分大小写字符

              return TRUE;

      

       MessageBox(hWnd, "序列号错误,原因可能是大小写错误!", "警告", MB_OK|MB_ICONWARNING);

      

       return FALSE;

}

 

请注意,函数的开头我使用了_declspec(dllexport)(请查阅MSDN作为函数转出声明,因此,还必需使用与DLL文件同名的StrCompare.def文件,文件内容如下:

; StrCompare.def : Declares the module parameters for the DLL.

 

LIBRARY      "StrCompare"

DESCRIPTION  'StrCompare Windows Dynamic Link Library'

 

EXPORTS

    ; Explicit exports can go here

       StrComp

 

把这个文件加入工程中后参与编译,这会禁止编译器将导出的函数以数字的形式输出(不同的C++编译器会将导出的函数以不同的形式输出)。这个步骤很重要,如果你不使用StrCompare.def文件,导出的StrComp函数名称无法被InstallShield识别,这个导出的函数看起来像这样:?StrComp@@YGHPAUHWND__@@PAD1@Z

 

按上面步骤导出的函数StrComp是能让InstallShield识别的合法函数。在InstallShield脚本中使用UseDLL("StrCmpare.dll")动态加载StrCmpare.dll,最后调用导出的函数StrComp,使用这个函数对两个字符串中的对应字符进行比较,并区分字符的大小写。

InstallShield如何调用c++的dll

教程    1 用c++ 6 新建一个非mfc的dll工程sss,选择生成“a symbol that exports some symbols”    2 在sss.h的最后加入以下代码    ex...
  • Ronal_Lee
  • Ronal_Lee
  • 2009年03月14日 13:59
  • 3128

InstallShield 调用自编 DLL 示范

InstallShield 脚本调用 DLL 示范   /******************************************************************/ ...
  • joyous
  • joyous
  • 2011年02月23日 13:26
  • 3154

InstallShield2008使用DLL方法

在InstallShield2008中:1、先在Behavior and Logic下Support Files/Billboards的Support Files面板里的适合位置插入要使用的DLL文件...
  • zxpo
  • zxpo
  • 2009年04月02日 09:02
  • 704

Installshield打包dll时,将dll文件自动注册

由于开发中使用了dll控件,如果目标机器上没有对应的dll文件会造成应用程序无法正常运行,经过查找资料,发现InstallShield是自己带了自加载dll等自动注册控件的功能。流程如下: 第一步:...
  • wanlixingzhe
  • wanlixingzhe
  • 2012年01月06日 14:46
  • 6199

InstallShield如何调用c++的dll

    1 用c++ 6 新建一个非mfc的dll工程sss,选择生成“a symbol that exports some symbols”    2 在sss.h的最后加入以下代码    exte...
  • hq050607127
  • hq050607127
  • 2010年10月20日 18:35
  • 439

InstallShield调用.net的dll实现des加密功能

环境:Installshield 12,win xp,Vs2005(用vs2010试了好几天出错,出现函数不可调用),在is 12中建了installshield installscript  msi...
  • hotmocha
  • hotmocha
  • 2012年03月11日 11:04
  • 1627

CALL 调用之DLL实现

我们找到了F1-F8 功能CALL,并做了测试,发现287版武林外传,,已经封掉了WriteProcessMemory这个API函数所以写入代码再远程调用的方法已经不好用了,今天我们将介绍一种新的方法...
  • zang141588761
  • zang141588761
  • 2016年08月14日 20:42
  • 527

installshield调用第三方dll文件

在卸载程序时需要调用dll文件释放license,研究了下怎样去掉用第三方dll文件。 首先看官方的例子: /*------------------------------------------...
  • zhuleiwuming
  • zhuleiwuming
  • 2014年01月08日 23:55
  • 944

C++创建dll文件及使用方法

一、DLL的创建  创建项目: Win32->Win32项目,名称:dllTest,应用程序类型选择dll,不要去掉预编译头 添加新建项头文件dllTest.h,如下 #ifndef DllTe...
  • jirryzhang
  • jirryzhang
  • 2017年01月13日 14:30
  • 2457

InstallShield脚本语言的初识

看了看过去的博客觉得自己这一年学的真杂……这不,又开始学InstallShield了。 先简单介绍一下,InstallShield是一款打包软件,作用是把已经开发完成的应用程序打包成安装程序,实...
  • m0_38021128
  • m0_38021128
  • 2018年01月09日 14:59
  • 103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:InstallShield6.x调用由C++创建的DLL函数
举报原因:
原因补充:

(最多只允许输入30个字)