Entra

View Full Version : [VB6] Come modificare il programma in VB(x so 32 bit)per farlo girare su s.o. 16 bit


hereistay
27-11-2009, 00:03
[VB] Come modificare il programma per utilizzarlo su win 98?

--------------------------------------------------------------------------------
Ciao!
Vi riporto il programma che dovrei utilizzare per gestire un dispositivo esterno via parallela.
Questo è il modulo per la gestione parallela esclusivamente per un s.o. a 32 bit:

'----------------------------RICHIAMO ALLA LIBRERIA PER LA GESTIONE DELLA PORTA LPT----------------------------
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

'--------------------------COSTANTI PER GLI INDIRIZZI DELLA PORTA LPT1--------------------------------
Public Const IndirizzoData As String = "&H378" 'REGISTRO DATA: sola scrittura (8 bit)
'Public Const IndirizzoStatus As String = "&H379" 'REGISTRO STATUS: sola lettura (ultimi 5 bit)
'Public Const IndirizzoControl As String = "&H37a" 'REGISTRO CONTROL: lettura + scrittura (primi 4 bit)

Public StatoCubo(1 To 8, 1 To 64) As Integer 'variabile che contiene lo stato attuale di TUTTO il cubo

Public Function ScriviCubo(NumeroCicli As Integer) 'scrive sul cubo lo stato memorizzato nella matrice StatoCubo
Dim ByteLpt As Byte
Dim ContaLivelli As Integer
Dim ContaLed As Integer
Dim ContaCicli As Integer

For ContaCicli = 1 To NumeroCicli

For ContaLivelli = 1 To 8

'imposto tutti i bit dello shift register senza clokkare sullo shift reg. dei livelli e disattivando SEMPRE il clear dello shift register (valore=2) (xx 01x _1_)
For ContaLed = 64 To 1 Step -1 'For ContaLed = 1 To 64
'SHIFT REG. LIVELLI:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=16)--> clear disattivato
'LSB = indifferente

'SHIFT REG. LED:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=2)--> clear disattivato
'LSB = StatoCubo(ContaLivelli, ContaLed)
ByteLpt = (0 + 16 + 0) + (0 + 2 + StatoCubo(ContaLivelli, ContaLed))
Call ClokkaLed(ByteLpt) 'passo il valore alla funzione che dà un colpo di clock allo shift dei led
Next ContaLed

'SHIFT REG. LIVELLI:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=16)--> clear disattivato
'LSB = (se livello = 1--> 1(valore=8); se livello <> 1--> 0) --> metto 1 solo la prima volta

'SHIFT REG. LED:
'MSB = 0 --> clock disattivato
'CENTRALE = 1 (valore=2)--> clear disattivato
'LSB = indifferente

If ContaLivelli = 1 Then
ByteLpt = (0 + 16 + 8) + (0 + 2 + 0)
Else
ByteLpt = (0 + 16 + 0) + (0 + 2 + 0)
End If
Call ClokkaLivello(ByteLpt) 'passo il valore alla funzione che dà un colpo di clock allo shift dei livelli

Call Aspetta(60000) 'smette di lampeggiare dai 60000 ai 70000

Next ContaLivelli

Call ClearAll 'richiamo la funzione per attivare il clear su entrambi gli shift register

Next ContaCicli

End Function

Public Function ClokkaLed(Valore As Byte) 'dà un colpo di clock modificando SOLAMENTE il bit del clock
Out Val(IndirizzoData), Val(Valore) 'clock DISATTIVATO
'aggiungo 4 perchè devo mettere ad 1 il bit del clock dello shift led x dare il colpo di clock
Out Val(IndirizzoData), Val(Valore + 4) 'clock ATTIVATO
End Function

Public Function ClokkaLivello(Valore As Byte) 'dà un colpo di clock modificando SOLAMENTE il bit del clock
Out Val(IndirizzoData), Val(Valore) 'clock DISATTIVATO
'aggiungo 32 perchè devo mettere ad 1 il bit del clock dello shift livello x dare il colpo di clock
Out Val(IndirizzoData), Val(Valore + 32) 'clock ATTIVATO
End Function

Public Function ClearAll() 'svuoto tutti gli shift register
Dim ByteLpt As Byte
'attivo il clear su entrambi gli shift register (valore=0) così li azzero (xx x0x x0x)
ByteLpt = 0 '00 000 000
Out Val(IndirizzoData), Val(ByteLpt)
End Function

Public Function Aspetta(Ncicli As Long) 'funzione per ritardare il ciclo di refresh del cubo
Dim Contatore As Long
Dim Contato As Long

For Contatore = 0 To Ncicli
Contato = Contatore
Next Contatore
End Function

Come potete notare, si fa immediatamente richiamo alla dll input32.dll che è necessaria per gestire la parallela su s.o. a 32 bit.
In caso il s.o. sia a 16 bit, come win 98 (nel mio caso) leggo da un sito questo:

"ISTRUZIONI PER L’USO DELLA PORTA PARALLELA CON PROGRAMMI IN VISUAL BASIC (5.X E SUCCESSIVE VERSIONI)



Visual Basic non ha istruzioni dirette di I/O per indirizzare la porta parallela, si deve utilizzare pertanto una libreria dinamica (DDL) scritta per svolgere tale funzione.

Alla libreria da utilizzare è stato assegnato il nome 32IOF.DLL.

Il file di libreria può essere scaricato come allegato dalla pagina espandi il tuo libro relativa a questo testo.

Questo file di libreria deve essere copiato nella cartella C:\WINDOWS\SYSTEM.



a) Comandi di input ed output
Le funzioni di I/O che implementano i comandi per l’input e output dei dati in Visual Basic sono:

· per l’input:

dato = Fin(&H379) per la LPT1

dato = Fin(&H279) per la LPT2

(dato è una variabile di tipo byte)



· per l’output:

Call Fout(dato, &H379) per la LPT1
Call Fout(dato, &H279) per la LPT2

attenzione: le funzioni Fin e Fout debbono essere scritte così come sono riportate, rispettando le maiuscole e le minuscole



b) Utilizzo della libreria .dll
Si ricorda che per l’utilizzazione della libreria DDL deve essere aggiunto al programma scritto in Visual Basic un modulo che contiene la dichiarazione per la chiamata della DLL. Sulla parte (dichiarazioni) (generale) del modulo debbono essere scritte le seguenti dichiarazioni, occupando per ognuna di esse un’intera riga (senza andare a capo):



Public Declare Function Fin Lib "32IOF.DLL" (ByVal ind_port As Integer) As Byte
Public Declare Function Fout Lib "32IOF.DLL" (ByVal dato As Byte, ByVal ind_port As Integer) As Byte



Rispettare anche in questo caso maiuscole /minuscole per Fin e Fout."

Ossia per win 98 bisogna utilizzare la dll 32IOF.DLL. e scrivere sul programma questo:
Public Declare Function Fin Lib "32IOF.DLL" (ByVal ind_port As Integer) As Byte
Public Declare Function Fout Lib "32IOF.DLL" (ByVal dato As Byte, ByVal ind_port As Integer) As Byte

Io chiedo se gentilmente una buon'anima può riportarmi il programma modificato per far sì che parta con win 98, chiedo di riportare solo la parte che va modificata...in poche parole dove va scritta questa parte: Public Declare Function Fin Lib "32IOF.DLL" (ByVal ind_port As Integer) As Byte
Public Declare Function Fout Lib "32IOF.DLL" (ByVal dato As Byte, ByVal ind_port As Integer) As Byte

Non capisco cosa intenda per "Si ricorda che per l’utilizzazione della libreria DDL deve essere aggiunto al programma scritto in Visual Basic un modulo che contiene la dichiarazione per la chiamata della DLL. Sulla parte (dichiarazioni) (generale) del modulo debbono essere scritte le seguenti dichiarazioni, occupando per ognuna di esse un’intera riga (senza andare a capo)".
Scusatemi ma non so molto di linguaggi di programmazione!!
Grazie anticipatamente a chi sarà disposto ad aiutarmi!

fero86
27-11-2009, 15:34
Windows 98 non é un sistema a 16 bit... :mbe:

hereistay
27-11-2009, 16:30
ah...e perchè in quella pagina c'è la distinzione per i s.o. a 32 bit e parla dei s.o. dopo win 98?

MarcoGG
27-11-2009, 17:52
Windows 98 è comunemente classificato come ibrido 16/32 bit. Personalmente non ci ho mai fatto nulla di serio, data la discutibile stabilità e le pesanti limitazioni del FAT32...
Le conversioni tra API di Win98 e WinNT sono argomento abbastanza oscuro per le mie esperienze. Unico consiglio che posso dare : con VB6 ( che assieme al predecessore VB5 è 32 bit al 100% ) l'ideale è Win2000, o WinXP 32.