Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 64位Access 2010下的StringFromGUID2_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Ms access 64位Access 2010下的StringFromGUID2

Ms access 64位Access 2010下的StringFromGUID2,ms-access,vba,ms-access-2010,Ms 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下为我生成GUI 其中GUID定义为: Public Type GUID Data1 As Long Data2 As Integer Data3 As Integer

我以前使用过:

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下为我生成GUI

其中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)
这是意料之中的,因为strprtr将在64位系统上返回LongPtr,在32位系统上返回Long


我不是全职开发人员,因此我不确定创建GUID字符串的最合适方法是什么,这种方法可以在32位和64位系统上使用。

StringFromGUID可用于Access应用程序


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

您好,请问如何定义GUID?如果使用以前使用的GUID定义,则会收到一条关于强制的错误消息:“只有在对象模块中定义的用户定义类型才能强制转换为变量或从变量转换为变量,或传递给后期绑定函数。我完全不确定您在做什么,但看看这是否有意义:您不确定的是,我必须生成guid,而不仅仅是读取它们。我看到的所有示例基本上都使用了已经有guid的控件。我需要生成新的GUID。为此,我使用CoCreateGUID函数:Public Declare PtrSafe函数CoCreateGUID Lib“ole32.dll”(vCLSID As GUID),只要它需要一个在原始帖子中定义的GUID(作为用户定义的类型),我在Access 2010 x64中使用了这段代码,它适合我。