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 に答える