Thread View: pl.comp.bazy-danych.msaccess
6 messages
6 total messages
Started by minfo@onet.pl
Thu, 19 Apr 2018 05:01
Deklaracja API Office 64 Bit i Win10 64 Bit
Author: minfo@onet.pl
Date: Thu, 19 Apr 2018 05:01
Date: Thu, 19 Apr 2018 05:01
46 lines
1292 bytes
1292 bytes
Dzień dobry, Czy coś jeszcze trzeba dodać do Deklaracji Api po #Else? Teraz mój Access 2016 podkreśla te części deklaracji na czerwono. #If VBA7 Then Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long Public i As Long ' teraz jako zmienna globalna Const interv As Integer = 1000 #Else Declare Function GetTickCount Lib "kernel32" () As Long Public i As Long ' teraz jako zmienna globalna Const interv As Integer = 1000 #End If #If VBA7 Then Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ (ByVal lpBuffer As String, nSize As Long) As Long #Else Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ (ByVal lpBuffer As String, nSize As Long) As Long #End If Public CurrentUserName As String #If VBA7 Then Private Declare PtrSafe Function apiGetComputerName Lib "kernel32" Alias _ "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long #Else Private Declare Function apiGetComputerName Lib "kernel32" Alias _ "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long #End If Po dodaniu PtrSafe zaczął rozpoznawać deklarację VBA7 Proszę o sprawdzenie deklaracji. MF
Re: Deklaracja API Office 64 Bit i Win10 64 Bit
Author: minfo@onet.pl
Date: Thu, 19 Apr 2018 05:06
Date: Thu, 19 Apr 2018 05:06
23 lines
898 bytes
898 bytes
#If VBA7 Then Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long Public i As Long ' teraz jako zmienna globalna Const interv As Integer = 1000 Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ (ByVal lpBuffer As String, nSize As Long) As Long Private Declare PtrSafe Function apiGetComputerName Lib "kernel32" Alias _ "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long #Else Declare Function GetTickCount Lib "kernel32" () As Long Public i As Long ' teraz jako zmienna globalna Const interv As Integer = 1000 Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ (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
Re: Deklaracja API Office 64 Bit i Win10 64 Bit
Author: Zbigniew Bratko
Date: Thu, 19 Apr 2018 22:16
Date: Thu, 19 Apr 2018 22:16
82 lines
2656 bytes
2656 bytes
W dniu 2018-04-19 o 14:01, minfo@onet.pl pisze: > Dzień dobry, > > Czy coś jeszcze trzeba dodać do Deklaracji Api po #Else? > Teraz mój Access 2016 podkreśla te części deklaracji na czerwono. > > > #If VBA7 Then > Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long > Public i As Long ' teraz jako zmienna globalna > Const interv As Integer = 1000 > #Else > Declare Function GetTickCount Lib "kernel32" () As Long > Public i As Long ' teraz jako zmienna globalna > Const interv As Integer = 1000 > #End If > > #If VBA7 Then > Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ > (ByVal lpBuffer As String, nSize As Long) As Long > #Else > Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ > (ByVal lpBuffer As String, nSize As Long) As Long > #End If > > Public CurrentUserName As String > > #If VBA7 Then > Private Declare PtrSafe Function apiGetComputerName Lib "kernel32" Alias _ > "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long > #Else > Private Declare Function apiGetComputerName Lib "kernel32" Alias _ > "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long > #End If > > > > > Po dodaniu > PtrSafe zaczął rozpoznawać deklarację VBA7 > Ale co w tym dziwnego. Kwalifikator PtrSafe jest obowiązkowy w VBA7 w systemach 64 bitowych. Określa, że deklaracja jest zgodna z 64 bitowymi środowiskami programistycznymi. Kod albo się kompiluje, albo nie. Jeśli się kompiluje, to super. Jeśli się nie kompiluje, to trzeba szukać przyczyn błędu. Problem możesz mieć przy korzystaniu np. z uchwytów okna. W Win32 bit jest to liczba typu Long, w 64 -bit typu LongLong, ale można korzystać z "typu" LongPtr. Typ ten zalecany jest do przechowywania wskaźników i uchwytów, zarówno w środowisku 32-bitowym jak i 64-bitowym środowisku VBA7, co umożliwia pisanie przenośnego kodu, który można uruchomić w zarówno 32-bitowym i 64-bitowym środowisku. LongPtr nie jest prawdziwym typem danych. W środowisku 32-bitowym przyjmuje czterobajtowy typ Long, a w środowisku 64-bitowym przyjmuje ośmiobajtowy typ LongLong Można deklarować uchety, wskaźniki itp np. #If VBA7 then Dim hwind as LongPtr #Else Dim hwind as Long #End If Jest też stała kompilacji Win64 ale, co kto lubi. ... itd. itd. ... Ja robię tak, że otwieram (kompiluję) bazę w Access 2007 32-bit i w Access 2010 lub 2016 64 bit. I kod musi się kompilować w obu (32 i 64 -bitowych) wersjach Access'a. -- Pozdrowienia BraZby www.faq.accdb.pl www.accdb.pl
Re: Deklaracja API Office 64 Bit i Win10 64 Bit
Author: minfo@onet.pl
Date: Fri, 20 Apr 2018 01:58
Date: Fri, 20 Apr 2018 01:58
17 lines
455 bytes
455 bytes
> > Po dodaniu > > PtrSafe zaczął rozpoznawać deklarację VBA7 > > > > Ale co w tym dziwnego. > Dziekuję za odpowiedż. Moduł po przeniesieniu do A10 32bit nie jest na czerwono po #Else. Skompilowałem p przeniosłem z powrotem na A16 64bit Ponownie podkreślone są te trzy deklaracje po #Else. Czy mam sie tym przejmować? Zbigniew, czy mam rozumieć że to nie jest problem? MF
Re: Deklaracja API Office 64 Bit i Win10 64 Bit
Author: Zbigniew Bratko
Date: Sat, 21 Apr 2018 10:46
Date: Sat, 21 Apr 2018 10:46
43 lines
945 bytes
945 bytes
W dniu 2018-04-20 o 10:58, minfo@onet.pl pisze: >>> Po dodaniu >>> PtrSafe zaczął rozpoznawać deklarację VBA7 >>> >> >> Ale co w tym dziwnego. >> > > Dziekuję za odpowiedż. > > Moduł po przeniesieniu do A10 32bit nie jest na czerwono po #Else. > Skompilowałem p przeniosłem z powrotem na A16 64bit > > Ponownie podkreślone są te trzy deklaracje po #Else. > > Czy mam sie tym przejmować? > Zbigniew, czy mam rozumieć że to nie jest problem? [...] Tak ma być. Po to jest stała kompilacji warunkowej. W 64-bit stała VBA7 ma wartość TRUE więc Access "rozumie" pierwszą część, a części po #Else "nie rozumie" i jej nie przetwarza. Odwrotnie jest w 32-bit. VBA7 ma wartość FALSE więc przetwarzana jest część po #Else. Poniższy zapis zawsze będzie na czerwono, bez względu na wersję Accessa: #If False Then Dowolny tekst do zaremowania #End If -- Pozdrowienia BraZby www.faq.accdb.pl www.accdb.pl
Re: Deklaracja API Office 64 Bit i Win10 64 Bit
Author: Zbigniew Bratko
Date: Sat, 21 Apr 2018 11:10
Date: Sat, 21 Apr 2018 11:10
22 lines
516 bytes
516 bytes
W dniu 2018-04-21 o 10:46, Zbigniew Bratko pisze: [...] Sprostowanie: > W 64-bit stała VBA7 ma wartość TRUE więc Access "rozumie" > pierwszą część, a części po #Else "nie rozumie" i jej nie przetwarza. Powinno być w VBA 6 i wersjach wcześniejszych stała VBA7 = False Począwszy od Accessa 2010 VBA7 = TRUE, bez względu na wersję bitową. Do określenia czy środowisko Office jest 64-bitowe służy stała kompilacji warunkowej Win64. -- Pozdrowienia BraZby www.faq.accdb.pl www.accdb.pl
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads