转帖:InstallShield如何使用脚本生成GUID

朋友Fishout写了一篇关于在InstallShield中,如何用脚本生成GUID,写的非常好,在征得朋友Fishout的同意后特转到这里与大家分享,原文链接:http://blog.csdn.net/fishout/archive/2010/09/01/5855822.aspx

版权归原作者所有,未经同意严禁转载,大家也可以访问Fishout的Blog

下面是全文:

作者:Fishout 

GUID---Globally Unique Identifier(全球唯一标识符)是通过特定算法产生并具有唯一性的一个二进制长度为128位的数字,在安装过程中,有时需要生成GUID供安装过程调用,以下代码的出处是国外哪个网站已不记得了,只是自己用过不错,贴出来供大家参考。

 1 // 函数定义描述
 2 prototype OLE32.CoCreateGuid(POINTER);
 3 prototype OLE32.StringFromGUID2(POINTERBYREF STRINGLONG);
 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, 039);
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,在主程序中这样调用:

#include "CreateStringGUID.rul"
STRING StringGUID

// 生成服务器GUID号

CreateStringGUID(StringGUID); 

原文地址:https://www.cnblogs.com/wanbinghong/p/1815090.html