Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    93

    [VB.net] Passare un puntatore di una funzione

    Sto' impazendo con sta cosa...

    Praticamente ho una funzione di una libreria esterna:

    codice:
    Private Declare Function Decompress Lib "library.dll" (ByVal Input_File As String, ByVal Output_File As String, ByRef Percentage_Done As Integer, ByVal Progress_Callback_Function As integer) As Integer
    il mio problema e' riuscire a passare il puntatore ad una sub o funzione (la progress_callback_function)

    quindi avrei una sub:

    codice:
    private sub Progress_Callback_Function ( ByVal Percentage_Done as integer)
       ' fa qualcosa...
    end sub
    Mi pare che si possa fare qualcosa con delegate ma non capisco gli esempi... ho provato con addressof ma non me lo prende perche' dice che non si puo' assegnare ad un intero .... Aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    42
    Puoi chiarire meglio il tuo intento... Sto provando a cercare una soluzione, ma non riesco a capire bene dove vuoi arrivare.... Sono un po'

  3. #3
    In VB.NET non puoi memorizzare un puntatore a funzione in un Integer, devi usare un delegate.
    codice:
    Public Delegate Sub ProgressCallback(ByVal Percentage_Done As Integer)
    Private Declare Function Decompress Lib "library.dll" (ByVal Input_File As String, ByVal Output_File As String, ByRef Percentage_Done As Integer, ByVal Progress_Callback_Function As ProgressCallback) As Integer
    '...
    Private Sub Progress_Callback_Function (ByVal Percentage_Done As Integer)
       ' fa qualcosa...
    End Sub
    '...
    intero = Decompress("nomefile.ext","nomefile2.ext",percentuale,AddressOf Progress_Callback_Function)
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    93
    MItaly, dopo ore di ricerca e prove, alla fine ho fatto quasi come hai postato tu, cambiano solo ste due righe

    codice:
    dim ptrCallback as new ProgressCallback (AddressOf Progress_Callback_Function)
    
    intero = Decompress("nomefile.ext","nomefile2.ext",percentuale, ptrCallback)
    ho messo il dim perche' ho visto che era messo in tutti gli esempi come se non si potesse mettere AddressOf direttamente, ho provato anche come hai postato e funziona, a sto punto tolgo il dim se non serve.

    Grazie

  5. #5
    Prego; comunque le due possibilità sono equivalenti, visto che VB.NET, se vede un "AddressOf <funzione>" passato come argomento di tipo delegato lo converte internamente in "New <tipodelegato>(AddressOf <funzione>)".
    Amaro C++, il gusto pieno dell'undefined behavior.

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.