🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#133979
Author: minfo@onet.pl
Date: Thu, 19 Apr 2018 05:01
46 lines
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
#133980
Author: minfo@onet.pl
Date: Thu, 19 Apr 2018 05:06
23 lines
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
#133981
Author: Zbigniew Bratko
Date: Thu, 19 Apr 2018 22:16
82 lines
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
#133982
Author: minfo@onet.pl
Date: Fri, 20 Apr 2018 01:58
17 lines
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
#133983
Author: Zbigniew Bratko
Date: Sat, 21 Apr 2018 10:46
43 lines
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
#133984
Author: Zbigniew Bratko
Date: Sat, 21 Apr 2018 11:10
22 lines
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