Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 24
  1. #11
    Era solo una domanda. Come sei permaloso!

    Comunque pensavo ti servisse una compilazione dinamica dal risultato della qualle caricare poi la dll. Se devi solo caricare la dll, sei sulla strada giusta.

    Ciao

  2. #12
    Originariamente inviato da markitos.net
    Era solo una domanda. Come sei permaloso!
    e stà faccia ( ) che mi da sui nervi



    Originariamente inviato da markitos.net
    Comunque pensavo ti servisse una compilazione dinamica dal risultato della qualle caricare poi la dll. Se devi solo caricare la dll, sei sulla strada giusta.
    si, la .dll è OK .. ora però devo usare la classe che stà nella dll


    nun so come fare
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #13
    OK, ho questa classe di prova banale ok?

    using System;
    using System.Windows.Forms;
    namespace prova_adll_reflection
    {
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class ProvaReflection
    {
    public ProvaReflection()
    {
    //
    // TODO: Add constructor logic here
    //
    }

    public void MsgBox()
    {
    MessageBox.Show("Questa DLL è stata cricata con Reflection");
    }
    }
    }

    e ho il mio bel form

    using System.reflection;
    ...
    private void Form1_Load(object sender, System.EventArgs e)
    {
    object obj;
    Type type;

    //mi carico l'assembly
    Assembly ass = Assembly.LoadFrom("F:\\progetti\\Visual Studio Projects\\prove\\prova_adll_reflection\\bin\\Debug \\prova_adll_reflection.dll");

    //carico i tipi (in questo caso solo 1: prova_adll_reflection.ProvaReflection)
    type=ass.GetTypes()[0];

    //Creo un'istanza del tipo
    obj=Activator.CreateInstance(type);

    //Invoco un metodo di nome MsgBox.
    //Se non conoscessi i metodi dovrei prima caricarmeli in un array
    //ma per semplicità non lo faccio
    type.InvokeMember("MsgBox",BindingFlags.Default | BindingFlags.InvokeMethod,
    null,
    obj,
    null);
    }


    Così mi compare la messagebox con la dicitura "Questa DLL è stata cricata con Reflection"

    Saluti

  4. #14
    se leggi delle comparazioni per le performance scoprirai che InvokeMethod è il sistema più lento per eseguire metodi

    quindi quando si può, e si può nel 99% dei casi, conviene usare le interfacce o classi astratte per arrivare alle classi
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #15
    Prima di tutto le classi astratte non c'entrano, perché se una classe deriva da un'altra può contenere metodi che la classe madre non implementa, e quindi ce l'hai in der posto lo stesso.
    Secondo devi conoscere a priori l'interfaccia che l'oggetto implementa, altrimenti ti devi scervellare (e scrivere una valanga di codice) per capire quale sia l'interfaccia da cui deriva.

    Il mio caso è un comune caso in cui questo non è possibile (non derivo da niente). Quindi non posso usare il tuo metodo. Inoltre il codice giusto un esempio. Poi se il nostro Andr3a vorrà si spulcerà i 1000 siti che parlano di performance nella reflection.

    Saluti

  6. #16
    Originariamente inviato da markitos.net
    Prima di tutto le classi astratte non c'entrano, perché se una classe deriva da un'altra può contenere metodi che la classe madre non implementa, e quindi ce l'hai in der posto lo stesso.
    Secondo devi conoscere a priori l'interfaccia che l'oggetto implementa, altrimenti ti devi scervellare (e scrivere una valanga di codice) per capire quale sia l'interfaccia da cui deriva.

    Il mio caso è un comune caso in cui questo non è possibile (non derivo da niente). Quindi non posso usare il tuo metodo. Inoltre il codice giusto un esempio. Poi se il nostro Andr3a vorrà si spulcerà i 1000 siti che parlano di performance nella reflection.

    Saluti
    il ragionamento che fai credo sia errato ... se tu hai 3 assembly che carichi dinamicamente che fanno tutte e 3 la stessa cosa, ovvero lavorano come backend, e quindi i metodi si chiamano in modo uguale ... ti basta definire un'interfaccia che definisca quei metodi in modo che tu possa richiamare quelli e poi la classe se la sbrogli per i fatti suoi

    di conseguenza scrivendo una semplicissima interfaccia puoi benissimo impostare queste classi come classi che estendano questa interfaccia e poi puoi usare poche righe di codice per richiamare la classe ottenendo performance inverosimilmente superiori
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #17
    Sinceramente non ho capito. Mi posteresti un esempio pls?

  8. #18
    Originariamente inviato da markitos.net
    Così mi compare la messagebox con la dicitura "Questa DLL è stata cricata con Reflection"
    allora .. intanto grazie, stò andando avanti, piano ma almeno stò andando


    il metodo che utilizzi mi da un errore
    System.MissingMethodException: Method 'MiaClasse.miometodo' not found.

    considera che il metodo esiste e come ... tant'è che faccio il tentativo direttmante in lettura metodi

    non vorrei che il problema fosse di tipo del metodo ... ovvero non è statico e quindi di fatto
    MiaClasse.qualcosa
    se non statico non potrà essere usato, dico male ?


    non so, credo sia il penultimo problema per ultimare quanto stia tentando di fare


    P.S. tale metodo accetta un parametro in ingresso .. che sia quello il problema ?

    [edit]
    anzi ... ne sono praticamente certo visto che se prendo il ToString o il GetHashCode non ho problemi .. se uso Equals invece, ad esempio, si ... method not found ... :master:
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #19
    ce l'ho fatta !!!


    grazie a tutti
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #20
    Originariamente inviato da andr3a
    P.S. tale metodo accetta un parametro in ingresso .. che sia quello il problema ?
    Certo che è quello. Devi passargli i parametri (l'ultimo parametro della chiamata). Se sai quali sono devi passarlieli sotto forma di array, altrimenti devi caricarteli con il metodo GetParameters.

    Comunque per una visione d'insieme uarda QUI

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 © 2026 vBulletin Solutions, Inc. All rights reserved.