static, non static Problem



  • Hi, erst mal sry für die wohl dumme Frage. Aber komm sonst nicht weiter.

    Ich habe das Problem das ich eine Methode definitiv mit static deklarieren muss und ich dadurch ja nicht mehr auf non static Elemente zugreifen kann... soweit ist das ja alles klar.

    Nur habe ich das Problem das ich auf die Übergabeparameter und den Rückgabetyp (void) keinen Einfluss nehmen kann! Diese Methode wird über eine Soundbibliothek selbst aufgerufen und daher muss ich in dieser Methode meine neuen Werte an meine Form weiter geben (textbox...)

    Eine Instanz habe ich bereits versucht das funktioniert nicht.

    Hilfe wäre nicht schlecht ^^

    Danke schonmal! 🙂



  • Ich habe das Problem das ich eine Methode definitiv mit static deklarieren muss

    Warum??



  • Zeige doch mal Code her, der dein Problem erklärt.



  • Wow das ging schnell ^^

    sync = gcnew Un4seen::Bass::SYNCPROC(metasync);
    Bass::BASS_ChannelSetSync(_stream, BASS_SYNC_META, 0, sync, 0);
    Bass::BASS_ChannelSetSync(_stream, BASSSync::BASS_SYNC_WMA_CHANGE, 0, sync, 0);
    
    static void metasync(int handle, int channel, int data, int user)
    {
    ...
    }
    

    Laut bass Forum muss ich unter c++ diese Funktionen static deklarieren... auch wenn es wohl erst eine Handvoll unter c++ probiert haben... unter C# hat man das Problem nämlich nicht

    Wenn ich sie als nicht statisch deklariere hab ich folgendes Problem

    sync = gcnew Un4seen::Bass::SYNCPROC(&IRSS::Form1::metasync);
    Bass::BASS_ChannelSetSync(_stream, BASS_SYNC_META, 0, sync, 0);
    Bass::BASS_ChannelSetSync(_stream, BASSSync::BASS_SYNC_WMA_CHANGE, 0, sync, 0);
    
    void metasync(int handle, int channel, int data, int user)
    {
    ...
    }
    

    error C3352: "void IRSS::Form1::metasync(int,int,int,int)": Die angegebene Funktion stimmt nicht mit dem Delegattyp "void (int,int,int,int)" überein.

    An dem delegate hab ich mich auch bisschen versucht gehabt aber muss ehrlich sagen das ich da nicht wirklich schlau werde was ich da so finde



  • Also das ist quatsch.

    In C# muss man lediglich this nicht explicit mit übergeben wenn man ein Delegate erstellt.

    In C++/CLI hingegen schon. Wenn du also ein Delegate erstellst welches ein "this" braucht dann musst es auch mit übergeben:
    gcnew DelegateType(this, &ClassName::foobar);

    So sollte das dann auch funktionieren.

    BR
    Vinzenz



  • private: delegate void forward(TAG_INFO^ t);
    
    void setnew(TAG_INFO^ t)
    {
    	this->Genrebox->Text="bla";
    }
    
    static void metasync(int handle, int channel, int data, int user)
    {
    ...
    forward^ f = gcnew forward(gcnew Form1,&IRSS::Form1::setnew);
    f(tagInfo);
    }
    

    So habe ich etz mein delegate, funzt aber nicht... aber das delegate müsste soweit passen oder



  • Probiers mal in etwa so:

    public ref class Form1
    {
    ...
    Un4seen::Bass::SYNCPROC ^ sync;
    void InitializeWhatever()
    {
      sync = gcnew Un4seen::Bass::SYNCPROC(this, &Form1::metasync);
      Bass::BASS_ChannelSetSync(_stream, BASS_SYNC_META, 0, sync, 0);
      Bass::BASS_ChannelSetSync(_stream, BASSSync::BASS_SYNC_WMA_CHANGE, 0, sync, 0);
    }
    
    void metasync(int handle, int channel, int data, int user)
    {
        this->Genrebox->Text="bla";
    }
    
    }
    

    [EDIT] static weg bei metasync [/EDIT]



  • 🙄 🙄
    Ich bin aber auch....
    Du hast recht hab mich da etwas verrant und an falschen stelle gesucht bzw gar nicht auf die idee gekommen

    Danke! 👍


Anmelden zum Antworten