Bevestiging 64 bits alleen een extra woordje "PtrSafe" aanpassen

Status
Niet open voor verdere reacties.

sanders1969

Gebruiker
Lid geworden
29 dec 2018
Berichten
243
Vrijwel heb ik te maken gehad met Office 32 bits installaties echter wil ik voorkomen dat mijn Access applicatie niet op 64 bits zal vastlopen.
Ik heb online eea onderzocht en ik krijg de indruk dat het verschil tussen 32 bits en 64 bits eigenlijk het woordje: "PtrSafe" betreft.
Klopt dit of was dit toeval?
Onderstaande code heb ik draaiend en ik heb in mijn programmatuur meerdere declaraties staan.
Ik wil deze allemaal voorzien met onderstaande structuur waar ik de VBA 7 afvangt en daar dus het woordje: "PtrSafe" in aanpast.
Ik hoop dus echt dat dit het geval is want ik heb best veel declaraties staan en dit scheelt mij iig nieuwe 64 bits functions opsporen.

Code:
#If VBA7 Then
's4p
  #If Win64 Then
   '64-bit Microsoft Office
    Private Declare [B]PtrSafe [/B]Function apiGetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
  #Else
   '32-bit Microsoft Office
    Private Declare [B]PtrSafe [/B]Function apiGetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
  #End If
#Else
   ' VBA 6 or earlier
    Private Declare Function apiGetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
   'Private Declare Function apiGetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If
 
Dat klopt inderdaad, maar je 32-bit gedeelte is fout.
En als het alleen gaat om het ophalen van de computernaam kan je het hele spul vervangen door dit:
Code:
Computernaam = Environ("COMPUTERNAME")
 
Laatst bewerkt:
Klopt daar kwam ik ook laatst achter dat usernames of computernames via Environ("?????") opgevraagd kon worden.
En de code welke fout was had ik online ergens opgehaald.
Iig bedankt voor je advies en het bevestigen!
 
Voor het verschil tussen 32- en 64 bit is dit voldoende:
Code:
#If Win64 Then
   [COLOR="#008000"]'64-bit Microsoft Office[/COLOR]
    Private Declare PtrSafe Function apiGetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#Else
   [COLOR="#008000"]'32-bit Microsoft Office[/COLOR]
    Private Declare Function apiGetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If
 
Even een vraagje.
Moet je overal de "PtrSafe" plaatsen? Onderstaande coderegel zie ik geen melding over dat dit een 32 bits is.
Het is een kleine moeite overal de "PtrSafe" plaatsen.

Code:
Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
 
Alleen bij de 64-bit Office.
En dan inderdaad bij alle API declaraties.
Uiteraard controleer je met #If Win64
Dit om het onafhankelijk te maken en het werkt in zowel de 32- als de 64-bit edities van Office.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan