Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - g.grandi

Pagine: 1 [2] 3 4
16
Programmazione (Gambas 2) / Re: Creare array ad indice irregolare
« il: 23 Settembre 2014, 09:00:33 »

Sono riuscito a risolvere il mio dilemma facendo una serie di prove. La mia lacuna derivava dal non aver capito bene il funzionamento della collection. In pratica pensavo che memorizzasse il puntatore della variabile passata, invece si comporta con la stessa logica dei parametri passati alle funzioni, se sono oggetti memorizza il puntatore, mentre se sono variabili ne fa una copia. In questo modo non ho più la necessità di usare un array per un solo elemento ma posso usare un intero dimensionato nella Sub e riciclarlo a piacere. Questo è l'esempio corretto di conseguenza...

PRIVATE iEccePor AS NEW Collection

PUBLIC SUB _new(cFlussi AS Collection)

  DIM o AS Object
  DIM i AS Integer
  DIM j AS Integer

  FOR EACH o IN cFlussi
    i = cFlussi.Key
    j = 0
    iEccePor.Add(j, i)
  NEXT

END

Grazie comunque per la cortesia ed il tempo dedicatomi

Ciao, Giovanni


17
Programmazione (Gambas 2) / Re: Creare array ad indice irregolare
« il: 22 Settembre 2014, 18:21:31 »
Citazione
Ma tu l'intero da inserire nella collection lo conosci già o lo devi, in qualche modo, calcolare?

Il programma all'avvio deve riservare lo spazio di memoria per stoccare gli interi che via via arriveranno durante l'esecuzione dello stesso. In pratica legge le temperature di un parco serbatoi ed in base al numero dello stesso va a registrarla nella relativa posizione della collection. Siccome tali silos hanno una numerazione creata ad hoc dal cliente (ma univoca) può capitare il caso che il numero di tale silos sia composto da un codice piuttosto lungo (ad esempio 3 cifre che identificano la provincia, 2 cifre per l'impianto e 3 cifre per il numero specifico del serbatoio). Ecco perchè non volevo dimensionare un vettore enorme.
Rimane però la domanda di fondo.
Se leggo da un file la numerazione dei serbatoi e voglio, a mano a mano che ne trovo uno, istanziare un intero e aggiungerlo alla collection, è possibilie? In C++ è possibile istanziare un singolo intero nello heap, in Gambas2 invece sembra non sia permesso.


18
Programmazione (Gambas 2) / Re: Creare array ad indice irregolare
« il: 22 Settembre 2014, 10:28:24 »

Penso di aver portato tutti fuori strada spiegnado cosa dovevo fare! E' esattamente come avete pensato e che ho risolto usando l'oggetto collection che mi permette di indicizzare gli elementi lasciando dei vuoti. Il mio quesito invece riguardava la possibilità di istanziare una classe nativa da una funzione. Questo è il passaggio che uso:

PRIVATE iEccePor AS NEW Collection

PUBLIC SUB _new(cFlussi AS Collection)

  DIM o AS Object
  DIM i AS Integer
  DIM i1 AS Integer[]

  FOR EACH o IN cFlussi
    i = cFlussi.Key
    i1 = NEW Integer[1]
    iEccePor.Add(i1, i)
  NEXT

END

In pratica per aggiungere alla collection iEccePor degli elementi che sono singoli interi, sono costretto ad usare un vettore di interi di un solo elemento (i1[]). Non posso istanziare un semplice integer da infilare nella collection. O come altra soluzione, creare una classe che contenga un solo integer. La mia domanda è quindi, vi è un modo di istanziare un semplice integer senza tirare in ballo una classe od un array?


19
Programmazione (Gambas 2) / Re: Creare array ad indice irregolare
« il: 19 Settembre 2014, 21:56:45 »

In pratica ho una discreta quantità di numeri, senza alcuna logica, cui devo assegnare un valore, e la soluzione ideale sarebbe appunto un array che copra l'intero range dal più piccolo al più grande. Volendo cimentarmi in una finezza (per così dire di non sprecare memoria) avevo valutato la versatilità della collection che si presta bene a tale scopo. Ma mi sono imbattuto nel limite di non poter allocare dinamicamente un intero. Non posso scrivere DIM I AS NEW INTEGER e stoccare poi tale I nella collection con Add. Per ottenere questo risultato sono costretto a dichiarare un array di interi di un solo elemento, ossia DIM I AS NEW INTEGER[1]. Mi chiedevo quindi se vi fosse una scappatoia a questo limite...

Ciao, Giovanni

20
Salve a tutti,
avrei un quesito da sottoporvi: è possibile creare una collection di soli interi con lo scopo di avere un array con indice irregolare? Cerco di spiegarmi meglio: voglio creare un array di 3 elementi di interi con i seguenti indici i[3], i[40] e i[100] senza dover dimensionare un intero di 101 elementi. La mia idea era quella di creare una collection di soli interi dove aggiungevo i 3 elementi con la chiave desiderata. Ma non è permesso istanziare un Integer con la parola chiave New (perchè è una classe nativa). Sono costretto quindi a ripiegare su un Integer[1] o su una classe costituita da un solo intero. Avete qualche scappatoia in merito?

Grazie anticipatamente per il tempo dedicatomi.

Salulti a tutti.
Giovanni

21

Grazie del suggerimento. Come al solito mi annego nel classico bicchiere d'acqua.

Ho aggiunto un metodo nella classe padre al quale passo il riferimento della classe figlia creata. In questo modo posso tenere la classe padre generica da utilizzare per tutti gli oggetti derivati.

Ciao, Giovanni

22
Ho creato l'esempio semplificato (che allego) dove si presenta l'errore alla chiamata di Me.TuaSub().

Citazione
A me dà errore alla riga oggetto.Start() in quanto nella Classe figlia, chiamata oggetto, non c'è quella funzione ".start()".
Nell'esempio allegato non presenta questo problema.

Citazione
Ritengo, inoltre, che, qualora tu non debba far sollevare eventi dalla Classe secondaria figlia, la riga
Codice: gambas
view plaincopy to clipboardprint?

    Object.Attach(oggetto, ME, "MiaFiglia") 

diventa superflua, in quanto tu istanzi la figlia già con la precedente riga:
Nel programma ho la necissità di sollevare eventi.

Citazione
Codice: gambas
view plaincopy to clipboardprint?

    PUBLIC oggetto AS NEW Figlia 

alla quale fra l'altro non vanno aggiunte quelle parantesi.
Le ho messe solo per richiamare l'attenzione che avevo dei parametri da passare alla sub _new

Ciao, Giovanni

23

Ammetto che sono alle prime armi con l'uso delle classi! L'esempio di Milio è una variante alla mia esigenza e può andare, ma ho comunque il problema che quando viene eseguita la Me.TuaSub() mi riporta l'errore che la TuaSub è sconosciuta nella classe padre. Cerco di fare una sintesi del mio codice:

Classe Padre  ----------------------

Public Sub _new()

  ...
  TuoTimer = NEW Timer AS "TuoTimer"
  TuoTimer.Enabled = FALSE


End Sub

Public sub TuoTimer_Timer ()

  Me.TuaSub ()

End

Public Sub Start()

  TuoTimer.Delay = 100
  TuoTimer.Enabled = TRUE 

End Sub

fine classe padre  --------------------


Classe Figlia  ---------------------

INHERIT Padre

Public Sub _new()

  ....

End Sub

Public Sub TuaSub ()

  'Codice diverso per ogni sub figlia

End

fine classe figlia --------------------


FMain.Class  ------------------

PUBLIC oggetto AS NEW Figlia(....)

Object.Attach(oggetto, ME, "MiaFiglia")

oggetto.Start()

fine Main  ------------------


Grazie, Giovanni

24
Non so se sto affrontando il problema in modo sbagliato, ma vado a descrivere cosa vorrei fare. Devo creare un progetto che contiene un gruppo di oggetti con funzioni identiche compreso un timer che deve richiamare una sub specializzata diversa per ogni oggetto del gruppo. L'idea è quella di raggruppare tutte le funzioni, compreso il timer, in una classe dalla quale derivare con il comando inherit ogni singolo oggetto contenente la sub specializzata. Qui però, mi sono arenato perchè non so come (e non so nemmeno se sia possibile) richiamare dal timer della classe padre, la sub presente nella classe derivata.

Grazie per il disturbo.
Giovanni Grandi

25
Programmazione (Gambas 2) / Re: Blocco file con comando LOCK
« il: 09 Settembre 2013, 15:42:50 »

Ho provato ad usare il comando come tu descrivi sul Wiki ma combina comunque casini. Io in pratica, devo bloccare un file esistente mentre lo modifico ed impedire ad altri processi di fare lo stesso, fino a quando ho finito. Provando con il comando LOCK, mi sparisce l'intero contenuto del file! Penso proprio di rinunciare a questo comando e ripiegare per un'altra soluzione.

Ciao, Giovanni

26
Programmazione (Gambas 2) / Blocco file con comando LOCK
« il: 09 Settembre 2013, 12:33:29 »
Salve a tutti. Come al solito mi imbatto in misteriosi comportamenti di Gambas. Volevo provare il comando LOCK per bloccare un file in modo esclusivo ed ho semplicemente provato a scrivere l'esempio che riporta nella guida in linea del comando stesso. Il risultato che ho ottenuto appena clicckato sull'esecuzione del programma è "Useless LOCK  alla linea....". A tutt'ora non c'è stato verso di fargli digerire questo comando e il messaggio non mi aiuta certo a capire cosa vi sia di sbagliato. Qualcuno è in grado di darmi aiuto?  Vi scrivo di seguito la semplice sub che ho usato per la prova.

Ciao, Giovanni

PUBLIC hFile AS File

PUBLIC SUB BloccaFile()

  hFile = OPEN "miofile" FOR READ
  LOCK #hFile

END SUB

27

Scusa. Forse l'ora di pranzo mi ha fatto mangiare pure il punto di domanda finale. In pratica chiedo alla comunità se vi sono dei parametri diversi di compilazione fra il gcc e g++ per ottenere le librerie shared (.so).

Giovanni

28

Ho preso spunto per la creazione di librerie condivise dalla sezione "guide della comunità" e fin qui tutto bene. Ora che sono alle prese con codice in C++ scopro che gli stessi esempi proposti nella sezione di cui sopra, non funzionano più se compilati con g++. Gambas2 non trova più il riferimento nelle librerie esterne ("cannot find symbol ..... in dynamic library ......). Devono essere usati dei parametri di compilazione diversi fra il gcc e g++.

Grazie
Giovanni

29

Si. Ho creato le librerie condivise (.so)  che richiamo con Extern e tutto funziona a meraviglia. Ma una classe è una cosa molto più complessa di una funzione. Per questo ho pensato alla trasformazione in componente... Proverò a fare qualche esperimento e nel caso riesca ad ottenere qualche risultato, lo comunico volentieri.

Ciao
Giovanni

30

Ora che sono riuscito ad utilizzare le funzioni C in Gambas, mi chiedevo se potevo fare un passo un po più lungo ed usare pure le classi che ho creato in C++. Documentandomi in giro ho letto che i componenti di Gambas possono essere scritti pure in C/C++ e pensavo quindi di convertire le classi C++ in componenti; ma non so da dove cominciare... Qualcuno della comunità ha già fatto qualcosa del genere?

Grazie
Giovanni

Pagine: 1 [2] 3 4