【发布时间】:2012-07-23 08:06:53
【问题描述】:
我以前使用过:
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 字符串的最合适方法是什么。
【问题讨论】:
标签: ms-access vba ms-access-2010