Windows 32ビットでvbaコードを使用しました。今度はWindows 10 64ビットに移行しました。「このプロジェクトのコードは、64ビットシステムで使用するために更新する必要があります。Declareステートメントを確認して更新し、PtrSafe属性でマークしてください。私が持って宣言コマンドは次のとおりです。Win64 VBAオフィスのDeclareステートメント
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だけを宣言している場合です。 Microsoftのマニュアルを
リンク https://msdn.microsoft.com/en-us/library/office/ee691831(v=office.14).aspx
誰かが私を助けることができますか?
データ型がポインタまたは(例えばハンドル)ポインタのサイズのデータ型を表すために必要があるときあなたは 'LongPtr'を使用しています。 'LongLong'は、ポインタの大きさにかかわらず常に64ビットの64ビット整数が必要なときに使います。使用している関数と構造体の元のC++シグネチャをMSDNで検索するには、https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspxを参照してください。どのプラットフォームが「PVOID」になっているのかを知るか、プラットフォームによってサイズが異なる「#if」を持ち、それらは「LongPtr」になります。 – GSerg