64位Access 2010下的StringFromGUID2

时间:2012-07-23 08:06:54

标签: access-vba ms-access-2010

我之前使用过:

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字符串的最合适方式。

1 个答案:

答案 0 :(得分:0)

StringFromGUID可用于Access应用程序。

Application.StringFromGUID Method (Access)

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