我在Windows 32位中使用了vba代码。现在我已经迁移到Windows 10 64位,我收到了消息:“此项目中的代码应该更新以用于64位系统,请检查并更新Declare语句,然后使用PtrSafe属性标记它们。”我有申报的命令如下:在Win64 VBA Office中声明语句
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
我看了一些文档,但使用龙龙和LongPtr语句时,我真的不能明白。或者,如果它只是在Declare语句中声明PtrSafe。
链接到微软的文档 https://msdn.microsoft.com/en-us/library/office/ee691831(v=office.14).aspx
有人能帮助我吗?
您使用'LongPtr'当数据类型需要代表指针或大小的数据类型(例如手柄)。无论指针大小如何,当您需要一个总是64位的64位整数时,您可以使用“LongLong”。在MSDN中查找您正在使用的函数和结构的原始C++签名,请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx要学习哪些归结为'PVOID'或具有'#if',这取决于平台给予它们不同的大小,而那些将是'LongPtr's。 – GSerg