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

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处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,使用这个函数对两个字符串中的对应字符进行比较,并区分字符的大小写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值