我之前使用的是:
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 字符串的最合适方法是什么。