我在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