杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2111|回复: 0

InstallShield 如何使用脚本生成GUID

[复制链接]
发表于 2017-3-1 18:49:43 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
   GUID---Globally Unique Identifier(全球唯一标识符)是通过特定算法产生并具有唯一性的一个二进制长度为128位的数字,在安装过程中,有时需要生成GUID供安装过程调用,以下代码的出处是国外哪个网站已不记得了,只是自己用过不错,贴出来供大家参考。
  1. // 函数定义描述  
  2. prototype OLE32.CoCreateGuid(POINTER);  
  3. prototype OLE32.StringFromGUID2(POINTER, BYREF STRING, LONG);  
  4. prototype CreateStringGUID (BYREF STRING);  
  5.   
  6. typedef GUID  
  7. begin  
  8.     LONG Data1;  
  9.     SHORT Data2;  
  10.     SHORT Data3;  
  11.     STRING  Date4[8];  
  12. end;  
  13. //---------------------------------------------------------------------------  
  14. // 函数:  CreateStringGUID---通过调用系统OLE32.DLL产生GUID字符串  
  15. //---------------------------------------------------------------------------  
  16. function CreateStringGUID(strGuid)  
  17.   
  18. NUMBER nResult, cbMax, i;  
  19. GUID gGuid;  
  20. GUID POINTER pGuid;  
  21. STRING lpszGuid;  
  22.   
  23. begin  
  24.   
  25.     // 初始化变量及函数指针  
  26.     pGuid = &gGuid;  
  27.     gGuid.Data1 = 0;  
  28.     gGuid.Data2 = 0;  
  29.     gGuid.Data3 = 0;  
  30.     cbMax = 64;  
  31.     if UseDLL(WINSYSDIR ^ "OLE32.dll") < 0 then  
  32.         MessageBox("不能打开 OLE32.DLL.文件!", WARNING);  
  33.         return -1;  
  34.     endif;  
  35.   
  36.     // 调用OLE32.DLL中的函数CoCreateGuid获取GUID - pGuid  
  37.     nResult = CoCreateGuid(pGuid);  
  38.     if nResult < 0 then  
  39.         MessageBox("调用 OLE32.DLL 失败 - 函数:CoCreateGuid()", WARNING);  
  40.         return -1;  
  41.     endif;  
  42.   
  43.     // 调用OLE32.DLL中的函数StringFromGUID2并转换pGuid为串 - strGuid  
  44.     nResult = StringFromGUID2(pGuid, lpszGuid, cbMax);  
  45.     if nResult < 0 then  
  46.         MessageBox("调用 OLE32.DLL 失败 - 函数:StringFromGUID2()", WARNING);  
  47.         return -1;  
  48.     endif;  
  49.   
  50.     // 转换unicode串strGuid为ANSI串  
  51.     for i = 0 to nResult - 1  
  52.         strGuid[i] = lpszGuid [i*2];  
  53.     endfor;  
  54.       
  55.     nResult = StrSub(strGuid, strGuid, 0, 39);  
  56.     if nResult < 0 then  
  57.         MessageBox("转换 GUID 失败.", WARNING);  
  58.         return -1;  
  59.     endif;  
  60.   
  61.     nResult = UnUseDLL("OLE32.dll");  
  62.   
  63. end;  
复制代码

    保存上述代码为:CreateStringGUID.rul,在主程序中这样调用:

  1. #include "CreateStringGUID.rul"
  2. STRING StringGUID


  3. // 生成服务器GUID号
  4. CreateStringGUID(StringGUID);
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-19 17:25 , Processed in 0.124063 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表