hur.cn - 华软网

 热门搜索

有没有同仁知道guid的问题?

  作者:未知    来源:网络    更新时间:2018/10/12
我的系统运用guid做为表的主键,可打包成可执行资料,装到客户那里却没法生成guid,说是没法和pb建立联系,在开发环境中运行良好。请大家帮一下
------华软网友回答------
pb中运用winapi生成唯一的永不重复字符串(UUID) 

--------------------------------------------------------------------------------

1、定义结构及外部函数

global type uuid from structure
 ulong  data1
 uint  data2
 uint  data3
 character  data4[8]
end type

Function ulong UuidCreate(ref uuid lpUUID) LIBRARY "rpcrt4"
Function ulong UuidToString (ref uuid lpUUID, ref long lpUUIDString)  LIBRARY "rpcrt4" Alias for "UuidToStringA"
Function ulong RpcStringFree(long lpUUIDString) LIBRARY "rpcrt4"  Alias for "RpcStringFreeA" 


2、函数主体

CONSTANT Long  RPC_S_OK = 0
CONSTANT Long  RPC_S_UUID_LOCAL_ONLY = 1824

Long ll_rtn
uuid u
ll_rtn = uuidcreate(u)  //Create a new UUID
IF ll_rtn = RPC_S_OK OR ll_rtn = RPC_S_UUID_LOCAL_ONLY THEN
     Long ll_pointer
     String ls_uuid
     ll_rtn = UuidToString(u,ll_pointer)
     ls_uuid = Upper(String (ll_pointer,"Address")) //Convert it to a string

     RpcStringFree(ll_pointer)//Remove the string from the memory
     RETURN ls_uuid
ELSE
     RETURN ""
END IF

注:宣布时候可能需要rpcrt4.dll


附:另外一种生成guid的方法

oleObject PBObject
string ls_GUID
long ll_result

PBObject = CREATE oleObject

ll_result = PBObject.ConnectToNewObject &
   ("PowerBuilder.Application")
IF ll_result < 0 THEN
 messagebox("","连接失利:与PowerBuilder.Application连接犯错!")
 Destroy PBObject
   return ""
ELSE
   ll_result = PBObject.GenerateGUID(REF ls_GUID)
END IF
Destroy PBObject

return Mid(ls_GUID,2,len(ls_GUID) - 2)

第二种方法在程序宣布时候需要在客户端举行配置:

pbapl80.dll
pbaen80.tlb
rpcrt4.dll


修改注册表以下

Windows Registry Editor Version 5.00


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PBAPPL.REG
;
; Registration information for PowerBuilder.Application.8
;
; All rights reserved.  No portion of this material may be copied in any way
; without prior written consent from Powersoft Corporation.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Version independent ProgID entries

[HKEY_CLASSES_ROOT\PowerBuilder.Application]
@="PowerBuilder Automation"

[HKEY_CLASSES_ROOT\PowerBuilder.Application\CLSID]
@="{88880001-8888-1000-8000-080009AC61A9}"

[HKEY_CLASSES_ROOT\PowerBuilder.Application\CurVer]
@="PowerBuilder.Application.8"

[HKEY_CLASSES_ROOT\PowerBuilder.Application\NotInsertable]
@=""

; Version specific ProgID entries
[HKEY_CLASSES_ROOT\PowerBuilder.Application.8]
@="PowerBuilder 8.0 Automation"

[HKEY_CLASSES_ROOT\PowerBuilder.Application.8\CLSID]
@="{88880001-8888-1000-8000-080009AC61A9}"

[HKEY_CLASSES_ROOT\PowerBuilder.Application.8\NotInsertable]
@=""

; CLSID entries
[HKEY_CLASSES_ROOT\CLSID\{88880001-8888-1000-8000-080009AC61A9}]
@="PowerBuilder Automation"

[HKEY_CLASSES_ROOT\CLSID\{88880001-8888-1000-8000-080009AC61A9}\InProcServer32]
@="d:\\Program Files\\Sybase\\Shared\\PowerBuilder\\pbvm80.dll"
"ThreadingModel"="Apartment"

[HKEY_CLASSES_ROOT\CLSID\{88880001-8888-1000-8000-080009AC61A9}\NotInsertable]
@=""

[HKEY_CLASSES_ROOT\CLSID\{88880001-8888-1000-8000-080009AC61A9}\ProgID]
@="PowerBuilder.Application.8"

[HKEY_CLASSES_ROOT\CLSID\{88880001-8888-1000-8000-080009AC61A9}\Programmable]
@=""

[HKEY_CLASSES_ROOT\CLSID\{88880001-8888-1000-8000-080009AC61A9}\TypeLib]
@="{88880002-8888-1000-8000-080009AC61A9}"

[HKEY_CLASSES_ROOT\CLSID\{88880001-8888-1000-8000-080009AC61A9}\VersionIndependentProgID]
@="PowerBuilder.Application"


; Type library registration entries
[HKEY_CLASSES_ROOT\TypeLib\{88880002-8888-1000-8000-080009AC61A9}]

[HKEY_CLASSES_ROOT\TypeLib\{88880002-8888-1000-8000-080009AC61A9}\1.0]
@="PowerBuilder Automation Type Library"

[HKEY_CLASSES_ROOT\TypeLib\{88880002-8888-1000-8000-080009AC61A9}\1.0\0]

[HKEY_CLASSES_ROOT\TypeLib\{88880002-8888-1000-8000-080009AC61A9}\1.0\0\Win32]
@="d:\\Program Files\\Sybase\\Shared\\PowerBuilder\\PBAEN80.TLB"

[HKEY_CLASSES_ROOT\TypeLib\{88880002-8888-1000-8000-080009AC61A9}\1.0\9]

[HKEY_CLASSES_ROOT\TypeLib\{88880002-8888-1000-8000-080009AC61A9}\1.0\9\Win32]
@="d:\\Program Files\\Sybase\\Shared\\PowerBuilder\\PBAEN80.TLB"
 

------华软网友回复------
需要RPCRT4.DLL
------华软网友回复------
如果客户用的是ORACLE或MSSQL,为什么不用数据库自身提供的生成GUID的方法呢?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。