Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB6] Confrontare variabili di tipo definito dall'utente

    Ciao a tutti,
    ho due variabili di tipo StrutturaRecord. StrutturaRecord è una struttura dati contentente n variabili.
    E' possibile verificare che le due variabili siano uguali senza dover guardare un campo alla volta e senza usare altre variabile di appoggio?

    ovvero...
    codice:
    Type StrutturaRecord
      Campo1   as String * 5
      Campo2   as String * 4
      ...
    End Type
    
    Sub Prova
      Dim SR1 as StrutturaRecord
      Dim SR2 as StrutturaRecord
    
      ...
    
      if SR1 = SR2 Then  '<---- non è possibile
    end Sub
    Grazie
    Luciano

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    759
    Non esiste un operatore di confronto per i tipi definiti dall'utente.
    Si può scrivere una funzione che, utilizzando l'API, copia in memoria le due variabili e poi, trattandole come array di byte, le confronta byte per byte.
    Ovviamente se si pensa che valga la pena.

  3. #3
    Strano... posso copiare il contenuto di una variabile dentro l'altra, ma non posso confrontarle. Perchè non ci hanno pensato?
    Quello che dici è vero, ma rallenterebbe in fase di elaborazione (perchè nel mio caso dovrei fare una copia di entrambe le variabili in cicli piuttosto lunghi).
    Sarebbe bello avere l'indirizzo della memoria in cui risiedono quelle variabili, con una dll in c potrei fare un confronto. Immagino che in vb6 sia possibile avere quell'indirizzo.

    Grazie mille!
    Luciano


  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Puoi scrivere

    codice:
    Public Type StrutturaRecord
      Campo1   As String * 5
      Campo2   As String * 4
    End Type
    
    Public Declare Function RtlCompareMemory Lib "ntdll" ( _
        ByRef Source1 As StrutturaRecord, _
        ByRef Source2 As StrutturaRecord, _
        ByVal Length As Long _
    ) As Long
    
    Public Sub Prova()
        Dim SR1 As StrutturaRecord
        Dim SR2 As StrutturaRecord
        Dim sLen As Long
        
        sLen = Len(SR1)
        If RtlCompareMemory(SR1, SR2, sLen) = sLen Then
            MsgBox "Uguali"
        Else
            MsgBox "Diverse"
        End If
    End Sub
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ottimo, ti dice anche fino a quale byte sono uguali... meglio di così!

    Grazie


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.