Newsgroup: it.comp.lang.visual-basic
Titolo: VBA - Problema con 64 bit

Ciao a tutti,
ho scritto un'applicazione in VBA per AutoCAD e ora mi trovo con dei 
problemi in Windows 7 a 64 bit. Nel 32 bit è tutto ok.
Non so più dove battere la testa... il muro non è sufficientemente duro  
:-((
Quindi chiedo a voi sperando possiate aiutarmi
Provo spiegare il problema:
Il codice che genera errore è questo:
Call oML.SetBlockAttributeValue(o.ObjectID, Format(Val(TextBox1.Text)))
Il codice sopraindicato funziona bene in Windows 32 bit ma on Windows 64 
bit lo devo sostituire con:
Call oML.SetBlockAttributeValue32(o.ObjectID32, Format(Val(TextBox1.Text)))
Per risolvere il problema senza realizzare due distinte applicazione ho 
pensato di utilizzare la funzione Is64bit che emette True se il SO è un 
64 bit altrimenti emette False.
Quindi ho scritto il seguente codice:
If Is64bit = False Then
      Call oML.SetBlockAttributeValue(o.ObjectID, 
Format(Val(TextBox1.Text)))
Else
      Call oML.SetBlockAttributeValue32(o.ObjectID32, 
Format(Val(TextBox1.Text)))
End If
Purtroppo non è sufficiente! in quanto viene rilevata la presenza del 
codice errato e da errore anche se l'IF esclude la sua esecuzione.
Potete darmi qualche dritta???
Grazie anticipatamente.

 Potete darmi qualche dritta???
Ciao
Tempo fa, In VB4 (del quale esisteva una versione a 16 bite e una a
32bit) avevo visto qualcosa di simile
#if IS16bit then
	Codice16bit
#else
	Codice32bit
#end if
Non so se i simboli "#" sono validi anche per il VBA
Magari trovi qualche ulteriore info qui:
http://msdn.microsoft.com/it-it/library/tx6yas69%28VS.80%29.aspx
o cmq cercando:
Istruzione di compilazione #If ... Then ... #Else
-- 
Daniele Pinna  (leva oops. per rispondere)
Utente Skype: dapinna
Sito Web: 
http://www.dapinna.com
	<-- Nuovo Sito... ora in Joomla
Il Docfa in Pillole:  
http://www.ildocfainpillole.it

 Potete darmi qualche dritta???
Ciao
Tempo fa, In VB4 (del quale esisteva una versione a 16 bit e una a


    
Ciao ti ringrazio per la risposta!!
spero proprio sia quella giusta, leggendo la guida in linea sembrerebbe 
di si ma non ne sono sicuro.
Tuttavia in fase di prova mi succede una cosa strana che proprio non 
riesco capire.
Ho scritto il seguente codice:
Private Sub CommandButton12_Click()
     Dim o As AcadEntity
     Dim elem As Object
     Dim Verifica64bit As Boolean
     Verifica64bit = Is64bit
     #If Verifica64bit = True Then
         MsgBox "64 bit"
        MsgBox Verifica64bit
     #Else
         MsgBox "32 bit"
         MsgBox Verifica64bit
     #End If
End Sub
Non riesco capire perchè mi appaiono le seguenti MsgBox
- 32 bit e poi True
Se Verifica64bit=True come la stessa MsgBox mi riporta... non dovrebbe 
andare su MsgBox "64 bit"??
Questa proprio non la capisco!!!!?   :-((
Ti riporto di seguito il codice trovato in internet della funzione 
IS64bit che io ho copiato in un modulo.
Private Declare Function GetProcAddress Lib "kernel32" _
     (ByVal hModule As Long, _
     ByVal lpProcName As String) As Long
Private Declare Function GetModuleHandle Lib "kernel32" _
     Alias "GetModuleHandleA" _
     (ByVal lpModuleName As String) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" _
     () As Long
Private Declare Function IsWow64Process Lib "kernel32" _
     (ByVal hProc As Long, _
     bWow64Process As Boolean) As Long
Public Function Is64bit() As Boolean
     Dim handle As Long, bolFunc As Boolean
     ' Assume initially that this is not a Wow64 process
     bolFunc = False
     ' Now check to see if IsWow64Process function exists
     handle = GetProcAddress(GetModuleHandle("kernel32"), _
                    "IsWow64Process")
     If handle > 0 Then ' IsWow64Process function exists
         ' Now use the function to determine if
         ' we are running under Wow64
         IsWow64Process GetCurrentProcess(), bolFunc
     End If
     Is64bit = bolFunc
End Function
Potresti darmi qualche consiglio?
grazie anticipatamente.

 Questa proprio non la capisco!!!!?   :-((
Be si è strano...
La prova l'hai fatta su un sistema a 64bit?

Per ora non mi viene in mente altro...
Spero ti possa aiutare qualcun altro più esperto...


 Spero ti possa aiutare qualcun altro più esperto...
Spero....
intanto grazie!

 ha scritto nel messaggio 
news:4bcb3901$0$1141$4faf...@reader1.news.tin.it...

Mi sa che hai fatto un po' di confusione...
Visto che Verifica64bit è una variabile (e non una costante di compilazione 
condizionale) devi usare un If standard, non #If (condizionale).
In pratica: togli i # !
Bye
Raf 


E' probabile che io abbia fatto confusione ma i # li ho messi per 
risolvere il principale problema di cui al primo post.
Effettivamente senza # il controllo IF funziona ma appena aggiungo la 
riga non compatibiel con sistemi a 64 bit va in crash!
Non so più che fare!

 ha scritto nel messaggio 
news:4bcd9b8c$0$1139$4faf...@reader1.news.tin.it...

Ti chiedo qualche info in più:
Call oML.SetBlockAttributeValue(o.ObjectID, Format(Val(TextBox1.Text)))
La riga è questa?
Che errore ti dà?
Come è definita la variabile oML?
Ciao
Raf