我在 Windows 32 位中使用了 vba 代码。现在我已迁移到 Windows 10 64 位,我收到消息“应更新此项目中的代码以在 64 位系统上使用。请查看并更新 Declare 语句,然后用 PtrSafe 属性标记它们。” 我拥有的声明命令如下:
Public Declare Function GetUserNameEx Lib "Secur32.dll" Alias "GetUserNameExA" ( _
ByVal NameFormat As EXTENDED_NAME_FORMAT, _
ByVal lpNameBuffer As String, _
ByRef lpnSize As Long) As Long
Public Enum EXTENDED_NAME_FORMAT
NameUnknown = 0
NameFullyQualifiedDN = 1
NameSamCompatible = 2
NameDisplay = 3
NameUniqueId = 6
NameCanonical = 7
NameUserPrincipal = 8
NameCanonicalEx = 9
NameServicePrincipal = 10
NameDnsDomain = 12
End Enum
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Public Declare Function ShellExecute _
Lib "shell32.dll" _
Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long
我查看了一些文档,但在使用 LongLong 和 LongPtr 语句时我无法真正理解。或者,如果它只是在 Declare 语句中声明 PtrSafe。
微软文档链接 https://msdn.microsoft.com/en-us/library/office/ee691831(v=office.14).aspx
有人能帮我吗?