n° 185
Maggio/Giugno 2013
Maggio 22, 2013, 01:05:02 pm *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  

* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Passare UDT a classi ora si puo  (Letto 5224 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
VBeXtreme
Sr. Member
****

Karma: +17/-99
Scollegato Scollegato

Messaggi: 662



Mostra profilo
« inserita:: Ottobre 07, 2009, 05:58:26 pm »

Quante volte vi è capitato di voler passare UDT a classi?Ma non si poteva.
Basta semplicemente usare i puntatori e il gioco è fatto.
Naturalmente gli udt non devono contenere stringhe di lunghezza variabile, e devono essere dichiarati nei moduli in cui si vogliono usare.

Es:

Class1:
Codice:
Option Explicit

Private Type tUtente
         Nome As String * 25
         Cognome As String * 25
End Type

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Public Sub MessaggioUtente(ByVal ptrUtente As Long)
        Dim U As tUtente
       
        CopyMemory ByVal VarPtr(U), ByVal ptrUtente, LenB(U)

        MsgBox RTrim(U.Nome) & RTrim(U.Cognome)

End Sub

Form1:
Codice:
Option Explicit

Private Type tUtente
         Nome As String * 25
         Cognome As String * 25
End Type

Private Sub Form_Load()
         Dim U As tUtente
         Dim Prova As New Class1
       
         U.Nome = "VB"
         U.Cognome = "Extreme"
         
         Prova.MessaggioUtente VarPtr(U)
End Sub

Per ulteriori chiarimenti sono qui ciauz
Registrato

Ragionare non è nient’altro che calcolare
"Thomas Hobbes"
Hyde
Global Moderator
Hero Member
*****

Karma: +47/-6
Scollegato Scollegato

Messaggi: 3266


I am a man who walks alone


Mostra profilo WWW
« Risposta #1 inserita:: Ottobre 08, 2009, 09:38:06 am »

Il sistema è un esamotage si, ma va un po' contro la logica del linguaggio.
Non è molto più comodo utilizzare una classe, anziché un UDT per operazioni del genere?
In quel modo segui le regole del linguaggio, non usi impropriamente strutture private e non hai limitazioni con stringhe fisse.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.
http://myitside.blogspot.com
VBeXtreme
Sr. Member
****

Karma: +17/-99
Scollegato Scollegato

Messaggi: 662



Mostra profilo
« Risposta #2 inserita:: Ottobre 08, 2009, 01:28:15 pm »

io lo chiamerei barba trucco...
per quanto riguarda le stringhe cerco sempre di utilizzare le fisse perché sono molto ma molto più veloci delle dinamiche e poi non mi sembra tutta sta limitazione.
dichiarare una classe senza metodi si commette sempre un errore quindi in teoria per contenere un gruppo di variabili e basta sarebbe meglio la struct(naturalmente se inseriamo un obj nella struct allora a quel punto abbiamo dei metodi e sarebbe meglio usare una classe)
nel mio post ho fatto un semplice esempio.
Se fai una classe con delle api  che voglia degli udt o scrivi tutti i parametri degli udt in una funzione che usa l'api(in teoria il metodo corretto solo secondo vb e non altri linguaggi)o più velocemente fai passare tutto l'udt.
penso che rimanga un buon trucchetto
Registrato

Ragionare non è nient’altro che calcolare
"Thomas Hobbes"
Hyde
Global Moderator
Hero Member
*****

Karma: +47/-6
Scollegato Scollegato

Messaggi: 3266


I am a man who walks alone


Mostra profilo WWW
« Risposta #3 inserita:: Ottobre 08, 2009, 01:54:53 pm »

Citazione
dichiarare una classe senza metodi si commette sempre un errore
Perché?!

Comunque è un buon trucco ed infatti sposto la discussione nell'area dedicata.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.
http://myitside.blogspot.com
VBeXtreme
Sr. Member
****

Karma: +17/-99
Scollegato Scollegato

Messaggi: 662



Mostra profilo
« Risposta #4 inserita:: Ottobre 08, 2009, 02:56:28 pm »

non scrivere in una classe delle proprietà o metodi si commette un errore, infatti in qualsiasi definizione di classe fatta da tutti è che una classe è un'insieme di proprietà e metodi. Lo conferma poi casa m infatti tutti gli oggetti del suo framework contengono tutti e due e in alcuni casi i metodi(a volte solo uno) sono pressoché inutili il che conferma quanto ho detto.
poi se pensiamo che un oggetto dovrebbe avere una sua 'vita' privata a questo punto il concetto di scrivere classi senza metodi diventa impossibile.
per finire il tip da me fornito non viola nessuna regola infatti fa rimanere privata la classe io lo vedo un pò come passare una variabile long,in ogni caso il codice chiamante deve conoscere a priori ciò che serve all'oggetto. Senza però dipendere da lui.
Registrato

Ragionare non è nient’altro che calcolare
"Thomas Hobbes"
Hyde
Global Moderator
Hero Member
*****

Karma: +47/-6
Scollegato Scollegato

Messaggi: 3266


I am a man who walks alone


Mostra profilo WWW
« Risposta #5 inserita:: Ottobre 08, 2009, 04:03:27 pm »

Per viola le regole del linguaggio intendevo che:
- un udt è privato per la classe e tale dovrebbe restare. Nel tuo tip tu implicitamente stai dicendo all'utente che esiste un tipo privato UDT all'interno della classe e che lo deve dichiare anche nel form/modulo se vuole avere un puntatore corretto nella chiamata di quel metodo.

Una classe senza metodi è perfettamente lecita, ma se proprio non ti piace puoi avere una classe con una proprietà(variabile nome nel tuo esempio) privata e due metodi Get/Set che ne gestiscono i valori.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.
http://myitside.blogspot.com
VBeXtreme
Sr. Member
****

Karma: +17/-99
Scollegato Scollegato

Messaggi: 662



Mostra profilo
« Risposta #6 inserita:: Ottobre 08, 2009, 06:15:02 pm »

non sto dicendo che non si può fare ma non è lecito...cmq ho deciso di preparare un articoletto sugli oggetti cosa sono e perché esistono....figurati che nel post .net c'è chi pensava di poter dichiarare una variabile come il c invece dichiarava un oggetto a system...appena ho tempo lo scrivo...per forza che uso udt privati, casa m non mi permette il pubblic...eh eh eh cmq preparati che sto iniziando a postare una serie di tip da urlo
Registrato

Ragionare non è nient’altro che calcolare
"Thomas Hobbes"
L-Craft
Newbie
*

Karma: +0/-1
Scollegato Scollegato

Messaggi: 3


Mostra profilo E-mail
« Risposta #7 inserita:: Settembre 16, 2010, 07:33:24 am »

Non è molto più comodo utilizzare una classe, anziché un UDT per operazioni del genere?
Registrato

VBeXtreme
Sr. Member
****

Karma: +17/-99
Scollegato Scollegato

Messaggi: 662



Mostra profilo
« Risposta #8 inserita:: Settembre 16, 2010, 09:44:25 am »

Se leggevi tutto avresti scoperto che a questa domanda ho già risposto,usare poi udt a volte è decisamente meglio che usare gli oggetti,ad esempio per memorizzare dati,infatti in tal caso se ad esempio abbiamo un oggetto che si chiama A e un'altro oggetto B di istanze della stessa classe diverse,se essi memorizzano in un array di udt dei dati es nomi,cognomi,dovremmo creare una sfilza di codice nell'oggetto b per poterci passare i dati di a,e in questo modo invece possiamo passare tutto in un colpo solo,salvare poi i dati contenuti in un udt è estremamente semplice,infatti basta una riga di codice,invece con gli oggetti devi impazzire all'ennesima potenza per garantire un corretto salvataggio.
 
Registrato

Ragionare non è nient’altro che calcolare
"Thomas Hobbes"
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2011 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



Links to Page