View Full Version : Porting C to VB
Marco Giunio Silano
04-10-2006, 07:39
Non chiedetemi perché, ma devo importare esattamente questo
int A(DWORD a, BYTE b)
{
switch (a)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
{
//code
break;
}
default:
{
if (b != 0)
return (-1);
break;
}
return (0);
}
in VB...
stamane sono stanco, ma come faccio?
saluti saluti... :D
EDIT
i case hanno un'esecuzione di codice
Private/Public Function A (ByVal/ByRef a As ... , ByVal/ByRef b As Byte) As Integer
Select Case a
Case 0
'Niente
Case 1
'Niente
Case 2
'Niente
Case 3
'Niente
Case 4
'Niente
Case 5
Break
Case Else
If b <> 0 Then
A = -1
End If
End Select
A = 0
End Function
Ho tradotto alla lettera :D più o meno ci dovremmo essere!
Marco Giunio Silano
04-10-2006, 08:03
Private/Public Function A (ByVal/ByRef a As ... , ByVal/ByRef b As Byte) As Integer
Select Case a
Case 0
'Niente
Case 1
'Niente
Case 2
'Niente
Case 3
'Niente
Case 4
'Niente
Case 5
Break
Case Else
If b <> 0 Then
A = -1
End If
End Select
A = 0
End Function
Ho tradotto alla lettera :D più o meno ci dovremmo essere!
Scusa, ho editato dopo, a me serve che nel caso la variabile a valga 0 o 1 o 2 o 3 o 4 o 5 esegua del codice, in tutti gli altri casi dell'altro codice.
Potrei provare debaggando vb, ma non un compilatore sotto le mani e devo dare il codice senza farlo girare (pensa che culo), quindi mi chiedo: se a=0, esegue il codice di a=5?
Grazie.
Marco Giunio Silano
04-10-2006, 08:07
ok, mi sparo un po' di if or anche se non mi piace, questo lo compila?
If ((a = 0) or (a = 1) or (a = 2) or (a = 3) or (a = 4) or (a = 5)) Then
''code
Else
''code
End If
potresti fare usare una if oppure una serie di or nella condizione del case...se no semplicmente questo codice che fai prima
If a >= 0 and a <= 5 Then
'Istruzioni
Else
'Istruzioni
End If
che fai prima ed è piu pulito che la serie di OR
Marco Giunio Silano
04-10-2006, 08:26
potresti fare usare una if oppure una serie di or nella condizione del case...se no semplicmente questo codice che fai prima
If a >= 0 and a <= 5 Then
'Istruzioni
Else
'Istruzioni
End If
che fai prima ed è piu pulito che la serie di OR
Tu hai ragione, ma 0,1,2.. (per semplificare ho scritto dei numeri) sono in realtà delle costanti a 32bit con valore da me non cotrollato. Per quello volevo usare uno switch e sono cotretto ad implementare un'orrenda serie di or...
Select Case A
Case 0,1,2,3,4
'Codice da eseguire nei casi A valga 0 o 1 o 2 o 3 o 4
Case 5
'Codice da eseguire nei casi A valga 5
Case Else
'Codice da eseguire in tutti gli altri casi
End Select
Tu hai ragione, ma 0,1,2.. (per semplificare ho scritto dei numeri) sono in realtà delle costanti a 32bit con valore da me non cotrollato. Per quello volevo usare uno switch e sono cotretto ad implementare un'orrenda serie di or...
Ah okkey, allora prova a fare come ti ha scritto sopra PFed ;)
Marco Giunio Silano
04-10-2006, 08:56
Select Case A
Case 0,1,2,3,4
'Codice da eseguire nei casi A valga 0 o 1 o 2 o 3 o 4
Case 5
'Codice da eseguire nei casi A valga 5
Case Else
'Codice da eseguire in tutti gli altri casi
End Select
ecco questo è pulito! :ave:
Marco Giunio Silano
04-10-2006, 08:56
Ah okkey, allora prova a fare come ti ha scritto sopra PFed ;)
;) grassie
Marco Giunio Silano
04-10-2006, 08:58
Visto che siete volenterosi, e questa?
BYTE elencoCoint[][] =
{
"primo",
"secondo",
"terzo",
"quarto",
};
Per usare gli array in vb ci sono vari modi, uno simile al tuo esempio in C è
Dim mioArray As Variant
oppure (dovrebbe andare con tutti e due)
Dim mioArray
mioArray = Array(-> elenco valori separati da virgola)
'Per accederci scriverai ad esempio mioArray(1)
se no altro metodo
Dim mioArray() As TuoTipo
'Qui dovrai utilizzare la funzione ReDim per ridimensionare, quando avrai bisogno, alla grandezza desiderata
Dim mioArray(n To m) As TuoTipo
Dim mioArray(n) As TuoTipo
'Riempi sempre con mioArray(n) = valore
con OptionBase 1/0 setti se far partire indice inferiore da 0 o da 1
Marco Giunio Silano
04-10-2006, 09:26
Per usare gli array in vb ci sono vari modi, uno simile al tuo esempio in C è
Dim mioArray As Variant
oppure (dovrebbe andare con tutti e due)
Dim mioArray
mioArray = Array(-> elenco valori separati da virgola)
'Per accederci scriverai ad esempio mioArray(1)
se no altro metodo
Dim mioArray() As TuoTipo
'Qui dovrai utilizzare la funzione ReDim per ridimensionare, quando avrai bisogno, alla grandezza desiderata
Dim mioArray(n To m) As TuoTipo
Dim mioArray(n) As TuoTipo
'Riempi sempre con mioArray(n) = valore
con OptionBase 1/0 setti se far partire indice inferiore da 0 o da 1
wow :mano: ma non c'è modo di inizializzarlo nel momento della dichiarazione?
Il tuo primo esempio: dichiaro il buffer, ma lo inizializzo in esecuzione codice. Non che sia male, ma preferisco avere tutte le cose (ove possibile) nello stesso punto, per evitare fra qualche tempo la famosa frase "ma dov'è che lo inizializzavo?"
Grazie.
wow :mano: ma non c'è modo di inizializzarlo nel momento della dichiarazione?
Il tuo primo esempio: dichiaro il buffer, ma lo inizializzo in esecuzione codice. Non che sia male, ma preferisco avere tutte le cose (ove possibile) nello stesso punto, per evitare fra qualche tempo la famosa frase "ma dov'è che lo inizializzavo?"
Grazie.
Ho un brutta notizia per te :D In Visual Basic 6.0 non si può inizializzare una variabile quando la dichiari :D
Sei obbligato a farlo dopo a livello di codice!
Se stai invece sviluppando in vb.net penso, e spero :D, abbiano aggiunto questa possibilità!
E' possibile in VB.NET, ma non in VB6!
Occhio ad utilizzare l'option base, sempre meglio lavorare con il valore di default!
Infine evita di utilizzare il Variant (se non strettamente necessario, e anche in questo caso valuta la possibilità di aver fatto qualche zozzata e che sia possibile ripulirla).
Nel caso postato io userei semplicemente le String
Marco Giunio Silano
04-10-2006, 09:53
Ho un brutta notizia per te :D In Visual Basic 6.0 non si può inizializzare una variabile quando la dichiari :D
:ncomment: :nera:
ma i linguaggi "nati dopo" perdono i pezzi per strada? :Prrr:
Sei obbligato a farlo dopo a livello di codice!
Così farò ;)
Se stai invece sviluppando in vb.net penso, e spero :D, abbiano aggiunto questa possibilità!
:uh: meglio complicarsi poco la vita :D
Grazie, sei un amore.
E' possibile in VB.NET, ma non in VB6!
Infine evita di utilizzare il Variant ...
Vero, dimenticanza, nel caso uno è possibile utilizzarlo con tutti i tipi di dato.
:ncomment: :nera:
Grazie, sei un amore.
Amico vade retro :D
Marco Giunio Silano
04-10-2006, 09:56
E' possibile in VB.NET, ma non in VB6!
Occhio ad utilizzare l'option base, sempre meglio lavorare con il valore di default!
Infine evita di utilizzare il Variant (se non strettamente necessario, e anche in questo caso valuta la possibilità di aver fatto qualche zozzata e che sia possibile ripulirla).
Nel caso postato io userei semplicemente le String
Ok, anche se è abitudine ragionare con gli index 0, lascerò che partano da 1.
Dim buffer As String, questo intendi?
Ok, anche se è abitudine ragionare con gli index 0, lascerò che partano da 1.
Dim buffer As String, questo intendi?
Option Base 0 è il default.
Option Base 1 lo sconsiglio per vari motivi.
Dim buffer() As String - questo intendo!
Marco Giunio Silano
04-10-2006, 10:09
Option Base 0 è il default.
Option Base 1 lo sconsiglio per vari motivi.
ero convinto che VB "contasse" partendo da 1... meglio se è da 0.
Dim buffer() As String - questo intendo!
;) tnk
Marco Giunio Silano
04-10-2006, 10:13
Amico vade retro :D
:D certo in intendevo quello che tu hai travisato :O era solo una gentilezza ;)
:D certo in intendevo quello che tu hai travisato :O era solo una gentilezza ;)
Lo lo so ;) :D
Non sapevo se mettere "scherzavo :D" alla fine o no :)
Sempre disponibile cmq per consigli ;) Per quanto utili possano essere :D
Marco Giunio Silano
04-10-2006, 10:32
Lo lo so ;) :D
Non sapevo se mettere "scherzavo :D" alla fine o no :)
Sempre disponibile cmq per consigli ;) Per quanto utili possano essere :D
:mano: sono indispensabili i tuoi consigli
Marco Giunio Silano
04-10-2006, 10:38
@PFed
@Della17
Scritto il codice e inviato. Risposta avuta: "Compila, gira e sembra funzionare"
Quindi: grazie :ave:
Marco Giunio Silano
04-10-2006, 15:49
Ua! Inoltro nuova domanda...
In C potevo andare a capo, ad esempio:
if ((a == 0) ||
(a = 10))
{
}
se in VB vado a capo mi restituisce un sintax error
If ((a = 0) or
(a = 10)) Then
End If
La domanda è, posso e come andare a capo?
If ((a = 0) or
(a = 10)) Then
End If
si dovrebbe scrivere così
If ((a = 0) or _
(a = 10)) Then
End If
Ci vuole lo spazio obbligatorio dopo la OR
Marco Giunio Silano
04-10-2006, 16:23
If ((a = 0) or
(a = 10)) Then
End If
si dovrebbe scrivere così
If ((a = 0) or _
(a = 10)) Then
End If
Ci vuole lo spazio obbligatorio dopo la OR
eia! Funziona! Grazie!
eia! Funziona! Grazie!
Prego :D
Marco Giunio Silano
06-10-2006, 16:24
Ecco la news del giorno :D
Devo mettere a "dormire" il tutto per n tempo, va benissimo la Sleep() del C, non ho bisogno di precisioen alcuna, deve solo dormire il tutto per il tempo che mi paice a me. In VB c'è il bell'oggetto timer che mi metto nella maschera, non voglio usare quello, nel flusso del codice ad un certo punto devo arrestare tutto pe run po'.
Immagino avete capito: Sleep(ms) -> VB????
tnk!
Metodo da purista (buttato lì al volo, da approfondire con i tipi e attenzione agli effetti collaterali del doevents):
Inizio = Now
Do While (Inizio + TempoDaAspettare) > Now
DoEvents
Loop
Metodo Api di windows, e hai la tua Sleep esattamente (o quasi) come in C:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Marco Giunio Silano
09-10-2006, 07:41
tnk!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.