Oppure

Loading
28/06/10 13:00
Neo1986
Buongiorno a tutti,

ecco un piccolo dilemma che oggi mi affligge.

Come mai non possi riempire un array di una struttura personalizzata in una classe?

Ecco il codice :

'struttura della lista parametri
    Public Structure ElencoParametri
        Public Comando As String
        Public Risposta As String
        Public Password As Boolean
        Public Contatore As Integer
    End Structure

    'elementi presenti nella lista dei parametri
    Private NumParametri As Integer = 5

    'dichiaro lista parametri
    Public Parametri(NumParametri) As ElencoParametri

    Parametri(0).Comando = "Prova"    'ECCO DOVE RESTITUISCE L'ERRORE


Nell'ultima riga del codice postato mi segnala errore (Declaration Expected).

L'unico modo che sono riuscito a trovare per compilare questa lista è includere la compilazione in una Sub, ecco il codice :

'inizializzazione dei parametri
    Public Sub Inizializza_Parametri()
'Richiesta DA
        Parametri(0).Comando = "DA"
        Parametri(0).Risposta = ""
        Parametri(0).Password = False
        Parametri(0).Contatore = 0
End Sub


Facendo così, per far si che la lista funzioni devo richiamare la sub Inizializza_Parametri(), scomodo all'interno di una dll.

Dove sbaglio? Consigli?

Grazie

aaa
28/06/10 13:29
HeDo

sbagli che il codice deve avere un contesto... non esiste il codice "al volo" :)

non importa che crei una dll o un programma, se quella classe deve inizializzare un'array semplicemente lo inserirai nel suo costruttore :)
aaa
28/06/10 13:48
Neo1986
sbagli che il codice deve avere un contesto... non esiste il codice "al volo"

non importa che crei una dll o un programma, se quella classe deve inizializzare un'array semplicemente lo inserirai nel suo costruttore


mmm.... capisco perfettamente cosa vuoi dire, solo che mi sembra un pò scomodo per chi userà la dll finale.

Questa famigerata lista, mi serve per inviare tramite porta seriale il testo contenuto nel campo Comando, è molto pericoloso dare la possibilità all'utilizzatore della dll di modificare a proprio piacimento quel campo... capisci?

diciamo che la lista viene usata/manipolata solo all'interno della dll...

qualche idea o consiglio? magari un'alternativa a questa lista... :heehee:
Ultima modifica effettuata da Neo1986 28/06/10 13:49
aaa
28/06/10 13:55
HeDo
Postato originariamente da Neo1986:

sbagli che il codice deve avere un contesto... non esiste il codice "al volo"

non importa che crei una dll o un programma, se quella classe deve inizializzare un'array semplicemente lo inserirai nel suo costruttore


mmm.... capisco perfettamente cosa vuoi dire, solo che mi sembra un pò scomodo per chi userà la dll finale.

Questa famigerata lista, mi serve per inviare tramite porta seriale il testo contenuto nel campo Comando, è molto pericoloso dare la possibilità all'utilizzatore della dll di modificare a proprio piacimento quel campo... capisci?

diciamo che la lista viene usata/manipolata solo all'interno della dll...

qualche idea o consiglio? magari un'alternativa a questa lista... :heehee:


l'utilizzatore della dll non ha il suo sorgente, altrimenti gli daresti il sorgente... non la dll, giusto?

Cosa intendi per "pericoloso"? Perchè mai dovrebbe modificarlo o ne dovrebbe essere in grado?
Si può tranquillamente impedire che una classe venga ad esempio ereditata e quindi overridata, in questo modo se sistemi quei parametri nel costruttore niente e nessuno toccherà quel codice.

Questo discorso ovviamente presuppone un mondo perfetto in cui i decompilatori .NET non esistono e tutti gli utenti sono buoni. Altrimenti bastano cmq due colpi di reflection per fare qualsiasi cosa per non parlare poi di estrarre tutto il codice del progetto dalla dll compilata.

Non so cosa stai realizzando, ma a mio avviso c'è qualcosa che non va nella scelta del linguaggio.
Ultima modifica effettuata da HeDo 28/06/10 13:56
aaa
28/06/10 14:59
Neo1986
mmm penso non ci stiamo capendo entrambi....

Allora, stò realizzando una dll che comunica con un sensore laser via porta seriale.

Dopo aver stabilito la comunicazione devo interrogare il sensore in questo modo:

ComPort.Write(COMANDO + vbcr + vblf)

e dopo aspetto la risposta e tutto ok.

Visto che ho una miriade di comandi, avevo pensato di inserire tutti i comandi in un lista di una struttura personalizzata, così facendo un semplice for posso inviare il comando, aspettare la risposta ed incrementando di 1 l'indice della lista passare alla richiesta successiva.

Il problema è che non riesco a riempire con i comandi la lista (con il codice che puoi leggere nel primo post).

Sono stato un pelo più chiaro? :k:
aaa
28/06/10 15:21
lorenzo
in pratica, tu il codice

 Parametri(0).Comando = "Prova"

lo metti nella DLL libero, senza metterlo in una funzione? Perché se è così è ovvio che ti dia errore.

Deve essere inserito in una Sub oppure in una Function.
aaa
28/06/10 15:26
HeDo
Postato originariamente da lorenzo:

in pratica, tu il codice

 Parametri(0).Comando = "Prova"

lo metti nella DLL libero, senza metterlo in una funzione? Perché se è così è ovvio che ti dia errore.

Deve essere inserito in una Sub oppure in una Function.


intervento inutile in quanto fin qui c'eravamo arrivati...

ho capito cosa vuoi fare e non mi sembra così difficile, semplicemente metti le inizializzazioni nei costruttori delle classi che ne hanno bisogno, punto.

a parte il fatto che potresti creare una classe per ogni comando e adottare un approcio molto più OOP alla situazione, al posto che cercare di usare vb.net come vb6 ;)
aaa
28/06/10 15:39
Neo1986
visto che abbiamo fatto 30 facciamo 31, nel caso volessi usare una classe per ogni comando, come potrei fare nel thread di lettura per fargli "scorrere" tutte le classi (quindi ogni comando)?
aaa