|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2009
Messaggi: 287
|
[VB6] Come modificare il programma in VB(x so 32 bit)per farlo girare su s.o. 16 bit
[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! Ultima modifica di hereistay : 27-11-2009 alle 01:05. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Windows 98 non é un sistema a 16 bit...
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2009
Messaggi: 287
|
ah...e perchè in quella pagina c'è la distinzione per i s.o. a 32 bit e parla dei s.o. dopo win 98?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
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. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:26.



















