我之前使用过:
Public Declare Function StringFromGUID2 Lib "ole32.dll" _
(rclsid As GUID, ByVal lpsz As Long, ByVal cbMax As Long) As Long
在32位和64位Windows上的Access 2007下为我生成GUID。
GUID定义为:
Public Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
(因为变体的VBA不支持VT_GUID)
我现在有了一台使用Access 2010 64位设置的新机器,现在这个东西已经坏了。
在Access 2010 64位下执行此操作的等效代码是什么?
我已根据需要添加了PtrSafe属性:
Public Declare PtrSafe Function StringFromGUID2 Lib "ole32.dll" _
(rclsid As GUID, ByVal lpsz As Long, ByVal cbMax As Long) As Long
这会导致实际呼叫中的类型不匹配:
Dim rc As Long
Dim stGuid As String
' 39 chars for the GUID plus room for the Null char
stGuid = String$(40, vbNullChar)
rc = StringFromGUID2(rclsid, StrPtr(stGuid), Len(stGuid) - 1)
由于StrPtr将在64位上返回LongPtr而在32位系统上返回Long,因此可以预料到这一点。
我不是全职开发人员,因此我不确定以适合32位和64位系统的方式创建GUID字符串的最合适方式。
答案 0 :(得分:0)