2

我之前使用的是:

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 字符串的最合适方法是什么。

4

1 回答 1

0

StringFromGUID 可用于 Access 应用程序。

Application.StringFromGUID 方法(访问)

您甚至可以在查询中使用它。

于 2012-07-23T08:23:46.013 回答