PDA

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

Della17
04-10-2006, 07:51
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

Della17
04-10-2006, 08:19
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...

PFed
04-10-2006, 08:47
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

Della17
04-10-2006, 08:54
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",
};

Della17
04-10-2006, 09:16
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.

Della17
04-10-2006, 09:32
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à!

PFed
04-10-2006, 09:50
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.

Della17
04-10-2006, 09:53
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.

Della17
04-10-2006, 09:55
: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?

PFed
04-10-2006, 09:59
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 ;)

Della17
04-10-2006, 10:26
: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?

Della17
04-10-2006, 16:17
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!

Della17
04-10-2006, 16:27
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!

PFed
07-10-2006, 01:18
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!