【问题标题】:StringFromGUID2 under 64 bit Access 201064位Access 2010下的StringFromGUID2
【发布时间】: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


    【解决方案1】:

    StringFromGUID 可用于 Access 应用程序。

    Application.StringFromGUID Method (Access)

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

    【讨论】:

    • 嗨 Remou,我如何定义 GUID?如果我使用之前使用的 GUID 的定义,我会收到一条关于强制的错误消息:“只有在对象模块中定义的用户定义类型才能强制转换为变量或从变量强制转换或传递给后期绑定函数。
    • 我完全不确定你在做什么,但看看这是否有兴趣:msdn.microsoft.com/en-us/library/aa172214(v=office.11).aspx
    • 您不确定的是我必须生成 GUIDS,而不仅仅是读取它们。我见过的所有示例基本上都使用了已经有 GUID 的控件。我需要生成新的 GUID。
    • 为此,我使用 CoCreateGUID 函数: Public Declare PtrSafe Function CoCreateGuid Lib "ole32.dll" _ (vCLSID As GUID) As Long 需要在原始帖子中定义的 GUID(作为用户定义类型)
    • 我在 Access 2010 x64 中使用了此代码 support.microsoft.com/kb/176790,它适用于我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2013-03-22
    相关资源
    最近更新 更多