Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Modulo access 64 bit

169 views
Skip to first unread message

Marco75

unread,
May 12, 2016, 8:34:51 AM5/12/16
to
Ciao,
in molti database utilizzo un modulo chiamato modMouseHook che blocca lo scorrimento dei record con la rotella del mouse.

Ho avviato uno di questi database su un nuovo PC e mi va in errore con questo messaggio:

Errore di compilazione:

Il codice del progetto deve essere aggiornato per l'utilizzo in sistemi a 64 bit. Esaminare e aggiornare le istruzioni Declare, quindi contrassegnarle con l'attributo PtrSafe.


questo è il punto del codice in errore nel modulo:

Option Compare Database
Option Explicit

Private Declare Function LoadLibrary Lib "kernel32" _
Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Private Declare Function FreeLibrary Lib "kernel32" _
(ByVal hLibModule As Long) As Long

Private Declare Function StopMouseWheel Lib "MouseHook" _
(ByVal hwnd As Long, ByVal AccessThreadID As Long, Optional ByVal blIsGlobal As Boolean = False) As Boolean

Private Declare Function StartMouseWheel Lib "MouseHook" _
(ByVal hwnd As Long) As Boolean

Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long

poi prosegue con altro codice, se serve lo posto in seguito

posso risolvere velocemente secondo voi?

grazie
Marco

Karl Donaubauer

unread,
May 12, 2016, 11:29:42 AM5/12/16
to
Marco75 ha scritto:
> in molti database utilizzo un modulo chiamato modMouseHook che blocca lo scorrimento dei record con la rotella del mouse.
>
> Ho avviato uno di questi database su un nuovo PC e mi va in errore con questo messaggio:
>
> Errore di compilazione:
>
> Il codice del progetto deve essere aggiornato per l'utilizzo in sistemi a 64 bit. Esaminare e aggiornare le istruzioni Declare, quindi contrassegnarle con l'attributo PtrSafe.
> ...
> Private Declare Function LoadLibrary Lib "kernel32" _
> Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
> ...
> posso risolvere velocemente secondo voi?

Dipende. Dalla versione 2007 in poi di Access la rotella non scorre più
dei record: http://support.microsoft.com/it-it/kb/2458709

Per versioni vecchi dovresti cambiare il codice. Leggi questo paragrafo
(e il seguente):

https://msdn.microsoft.com/en-us/library/office/ee691831%28v=office.14%29.aspx#odc_office2010_Compatibility32bit64bit_ApplicationProgrammingInterfaceCompatibility

--
Ciao
Karl
*********
Access FAQ: http://www.donkarl.com/it

Marco75

unread,
May 12, 2016, 12:29:08 PM5/12/16
to
Credo che tutti i PC dell'azienda ormai hanno come minimo il 2007 quindi basta togliere il modulo e il codice che lo usa, non dovrebbe essere un'operazione lunga!
in ogni caso domani o quando ho tempo guardo i tuoi link
grazie 1000
Marco

Marco75

unread,
May 13, 2016, 3:20:56 AM5/13/16
to
Devo aggiungere una funzione o cambiare tutto il codice?
Nel modulo ho questo:

Private Declare Function LoadLibrary Lib "kernel32" _
Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Private Declare Function FreeLibrary Lib "kernel32" _
(ByVal hLibModule As Long) As Long

Private Declare Function StopMouseWheel Lib "MouseHook" _
(ByVal hwnd As Long, ByVal AccessThreadID As Long, Optional ByVal blIsGlobal As Boolean = False) As Boolean

Private Declare Function StartMouseWheel Lib "MouseHook" _
(ByVal hwnd As Long) As Boolean

Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long

Mentre in una maschera ho questo:

Private Declare Function GetComputerName Lib "kernel32.dll" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

come li modifico? nell'articolo ho visto questo:

Declare PtrSafe Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey as LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As Long

basta aggiungerlo prima del codice vecchio?
grazie
Marco

Marco75

unread,
May 16, 2016, 4:32:10 AM5/16/16
to
Nessuno mi sa dire come modificare al meglio il codice?

Simone B.

unread,
May 16, 2016, 6:01:09 AM5/16/16
to


"Marco75" ha scritto nel messaggio
news:ad797238-e228-4de0...@googlegroups.com...

<<<<Nessuno mi sa dire come modificare al meglio il codice?

ogni attuale istruzione di tipo Declare ....

deve diventare :

Declare PtrSafe ........

Marco75

unread,
May 16, 2016, 6:35:20 AM5/16/16
to
Grazie Simone, ora sembra funzionare!
In avvio del DB ho però una barra di avanzamento che "simula" il caricamento del database mentre al di sotto esegue un paio di routine.

Come detto la barra è solo visiva ma mi piacerebbe mantenerla. L'avanzamento è definito dalla Function Secondi e mi va in errore in questo punto:

Me.CtlActiveX0.Value ==> "Nessun oggetto per questo controllo

Il sospetto è che devo usare un altro controllo ActiveX (sperando che funzioni poi ovunque), in ogni caso ti posto il codice della Function:

Function secondi()
Dim strMsg As String

Me.Testo12 = 0
Me.Testo14 = 0

Me.Testo10 = Time

DoEvents

Dim x As Double
Dim y As Double

x = 0
y = Forms!M_InfoVersione!Testo16 * 8000
For x = 1 To y
Me.CtlActiveX0.Value = x / (y / 100) 'Il valore massimo del controllo è 100
'per cui la barra si incrementa di 1/100
'ad ogni ciclo

Next x

'il ciclo è terminato

Me.Testo12 = Time
Me.Testo14 = DateDiff("s", Me.Testo10, Me.Testo12)

DoCmd.OpenForm "M_VediVersione", , , , , acHidden
DoCmd.OpenForm libFile.PrimaForm
DoCmd.Close acForm, "M_InfoVersione"

End Function

Mi sai dire qualcosa anche su questo?

P.S. Se uso PtrSafe questo poi mi funziona su PC a 32 bit con diversi office?

grazie ancora
Marco

Marco75

unread,
May 16, 2016, 9:46:32 AM5/16/16
to
Il giorno lunedì 16 maggio 2016 12:01:09 UTC+2, Simone B. ha scritto:
Lascia stare l'ultimo post, credo mi convenga eliminare il controllo ActiveX e per simulare la barra me la costruisco con 2 rettangoli chiamati boxProg e boxMax

Public Sub Progressbar(Totale As Long, Progress As Long)

Me.boxProg.Width = 0.992 * Me.BoxMax.Width * (Progress / Totale)
Me.Repaint
End Sub

poi nella maschera uso un comando pause per vedere l'avanzamento

Public Function Pause(NumberOfSeconds As Variant)
On Error GoTo Err_Pause

Dim PauseTime As Variant, start As Variant

PauseTime = NumberOfSeconds
start = Timer
Do While Timer < start + PauseTime
DoEvents
Loop

Exit_Pause:
Exit Function

Err_Pause:
MsgBox Err.Number & " - " & Err.Description, vbCritical, "Pause()"
Resume Exit_Pause

End Function


Private Sub Form_Timer()

Call Progressbar(100, 10)
Pause (0.3)
Call Progressbar(100, 20)
Pause (0.3)
Call Progressbar(100, 30)
Pause (0.3)
Call Progressbar(100, 40)
Pause (0.3)
Call Progressbar(100, 50)
Pause (0.3)
Call Progressbar(100, 60)
Pause (0.3)
Call Progressbar(100, 70)
Pause (0.3)
Call Progressbar(100, 80)
Pause (0.3)
Call Progressbar(100, 90)
Pause (0.3)
Call Progressbar(100, 100)

DoCmd.Close

End Sub

Simone B.

unread,
May 16, 2016, 2:36:05 PM5/16/16
to


"Marco75" ha scritto nel messaggio
news:08208e83-26b9-4a24...@googlegroups.com...


<P.S. Se uso PtrSafe questo poi mi funziona su PC a 32 bit con diversi
office?

secondo la documentazione sì

Marco75

unread,
May 17, 2016, 3:12:04 AM5/17/16
to
Provato su un paio di PC a 32 e 64 bit e sembra essere tutto ok!!
grazie
Marco

Marco75

unread,
May 23, 2016, 6:30:41 AM5/23/16
to
Ho ancora un problema! Non mi funziona più il controllo calendario "DTPicker"
Credo che anche qui bisogna impostarlo per l'uso a 64 bit!
Spero ci sia un modo rapido per farlo funzionare perchè questo oggetto è su molti database che uso!
Cosa posso fare?
grazie
Marco
0 new messages