Compilazione MDE sistemi a 32 e 64 bit

di il
6 risposte

Compilazione MDE sistemi a 32 e 64 bit

Cari tutti,
per la mia associazione (banca del tempo), ho prodotto un SW carino di gestione.
Io posseggo un PC che funziona a 64 bit ed ha una sua creazione del file MDE.
Per farlo funzionare sugli altri PC dei "cassieri" della banca, che hanno una struttura a 32 bit, ho bisogno di ricompilare il mio codice in sede locale altrimenti non gira.
La mia domanda è questa:
poiché a me poco importa che sul mio PC funzioni a 64, non posso dire al compilatore di trattare la compilazione sempre a 32 affinché possa essere spostato in modo facile su tutte le stazioni ?
Al momento, nel modulo base tengo queste dichiarazioni:

#If VBA7 Or Win64 Then
    ' Win 64 specific code
    Public Declare PtrSafe 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
#Else
    ' Win 32 specific code
    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
#End If
grazie a chi mi risponde e ciao.

6 Risposte

  • Re: Compilazione MDE sistemi a 32 e 64 bit

    antocuomo ha scritto:


    ...
    Io posseggo un PC che funziona a 64 bit ed ha una sua creazione del file MDE.
    Per farlo funzionare sugli altri PC dei "cassieri" della banca, che hanno una struttura a 32 bit, ho bisogno di ricompilare il mio codice in sede locale altrimenti non gira.
    ...
    Immagino che Access sia a 32bit, giusto? Perché altrimenti non c'è compilazione condizionale che tenga se tu hai Access a 64 bit e gli altri un sistema operativo a 32bit che non può supportare nemmeno il runtime a 64bit.
    Ipotizzando quindi che si tratti di Access a 32 bit e che tu voglia usare la compilazione condizionale in sede di creazione dell'eseguibile mde destinato a piattaforme a 32 bit, credo che si possa procedere così:
    1) dichiarare una costante di compilazione condizionale che rappresenta lo stato in cui si trova il progetto (sviluppo su 64bit o pronto per la distribuzione a 32bit)
    2) modificare le istruzioni di compilazione condizionale che già stai usando con un'ulteriore espressione dell'If da verificare
    #CONST cDebug As Boolean = True 'False per la distribuzione
    #If cDebug Or VBA7 Or Win64 Then
        ' Win 64 specific code
    ...
    #Else
        ' Win 32 specific code 'o per la distribuzione su 32bit
        Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    ...
    #End If
    Il problema di partenza, cioè la necessità di ricompilare tutto su 32 bit per farlo funzionare, però, credo fosse dovuto a questo
    #If VBA7 Or Win64 Then
    Scritto così venivano usate le chiamate API per s.o. a 64bit anche se si era in presenza di A2010 a 32bit perché in quest'ultimo caso VBA7 è comunque True. Forse, senza usare la costante di cui sopra, era sufficiente cambiare Or in And. Con riserva di approfondimento.
    Con quale versione di Access hai creato il tutto?
    In ogni caso, per un quadro più completo guarda qui: http://www.utteraccess.com/wiki/index.php/Conditional_Compilation anche per utilizzi più avanzati in futuro, in particolare la sezione "User Defined Compiler Constants".
  • Re: Compilazione MDE sistemi a 32 e 64 bit

    Caro amico ti ringrazio, ma purtroppo entrambe le modifiche non hanno sortito effetto positivo.

    il codice dopo la compilazione, trasportato su un pc a 32 bit, mi ha negato comunque il funzionamento.
    mi diceva che era stato compilato su 64 bit e quindi andava ricompilato.
    Intanto ti confermo che A2010 è per piattaforma a 32.

    Proverò ad acculturarmi maggiormente dove tu mi hai indicato di andare.
    grazie
    ti farò sapere eventualmente.
  • Re: Compilazione MDE sistemi a 32 e 64 bit

    antocuomo ha scritto:


    ...
    il codice dopo la compilazione, trasportato su un pc a 32 bit, mi ha negato comunque il funzionamento.
    mi diceva che era stato compilato su 64 bit e quindi andava ricompilato.
    Intanto ti confermo che A2010 è per piattaforma a 32.
    ...
    Nel frattempo anch'io penso e pensandoci bene questo
    #CONST cDebug As Boolean = False 'False per la distribuzione, True in progettazione
    #If cDebug Or VBA7 Or Win64 Then
        ' Win 64 specific code
    ...
    #Else
        ' Win 32 specific code 'o per la distribuzione su 32bit
    ...
    #End If
    non era giusto perché c'erano VBA7 e Win64 vere, sufficienti a far compilare il codice previsto per i s.o. a 64 bit.
    Il ragionamento giusto invece è:
    1) quando si è in fase di progettazione (cDebug = True)
    E
    2) si dispone almeno di Access2010 (VBA7 = True) che riconsce PtrSafe
    E
    3) si ha un s.o. a 64bit (Win64 = True)
    ALLORA
    esegui il codice previsto per i 64bit
    ALTRIMENTI
    l'altro.
    Quindi tutti And, non Or
    #CONST cDebug As Boolean = False 'False per la distribuzione, True in progettazione
    #If cDebug And VBA7 And Win64 Then
        ' Win 64 specific code
    ...
    #Else
        ' Win 32 specific code o per la distribuzione su 32bit
    ...
    #End If
  • Re: Compilazione MDE sistemi a 32 e 64 bit

    Mio caro Phil..., purtroppo anch'io devo confessarti di aver commesso un'imprecisione.
    Indagando sulla versione di Access, mi sono accorto che invece è per 64 bit, la qual cosa per come mi facevi capire, complica un pò tutto.
    Difatti dopo la tua ultima correzione, sui pc a 32 il sistema continuava a dirmi che il codice per girare doveva essere compilato a 32.

    Posso fare altro secondo te, prima di convertire eventualmente il mio Access a 32?

    ciao antonio
  • Re: Compilazione MDE sistemi a 32 e 64 bit

    Philcattivocarattere ha scritto:


    ...
    #CONST cDebug As Boolean = False 'False per la distribuzione, True in progettazione
    ...
    diciamola tutta allora, che la dichiarazione delle costanti per la compilazione condizionale non accetta il data type, quindi si doveva scrivere
    #CONST cDebug = False

    antocuomo ha scritto:


    Mio caro Phil..., purtroppo anch'io devo confessarti di aver commesso un'imprecisione.
    Indagando sulla versione di Access, mi sono accorto che invece è per 64 bit,
    tutto faceva supporre questo, altrimenti sarebbero andate ko solo le funzioni aggiunte con le API, con errori di altro tipo, ma non avevo il coraggio di chiedere una seconda verifica della versione.
    Non ci sono altre strade: visto che dovrà funzionare su s.o. a 32 bit che non supportano Access o Runtime a 64bit, dovrai preparare tutto con Access a 32bit e se su quest'ultima postazione il s.o. è a 64bit hai già la strada tracciata per la compilazione condizionale.
  • Re: Compilazione MDE sistemi a 32 e 64 bit

    Grazie per tutte le tue preziose delucidazioni e scusami.

    antonio
Devi accedere o registrarti per scrivere nel forum
6 risposte