schlüsselwort frage



  • Hallo

    wo für ist das schlüssewort reinterpret_cast

    LPMIDIEVENT lpEvent = reinterpret_cast<LPMIDIEVENT>(wParam);

    kennst sich da jemand damit aus?

    Grüße Can



  • Hallo,

    ein solcher cast wird eingesetzt, um Typen zu konvertieren, die eigentlich nichts miteinander zu tun haben. Ein wParam z.B. ist ein Integer-Typ, aber ein LPMIDIEVENT ist ein Zeiger auf eine MIDIEVENT-Struktur, also verschiedene Typen, die ohne diesen cast nicht einander zugewiesen werden können. D.h., es wird durch

    reinterpret_cast<LPMIDIEVENT>(wParam);
    

    erzwungen, daß der in wParam liegende Wert re- bzw. neu-interpretiert wird als Zeiger auf eine MIDIEVENT-Struktur.

    Eine Übersicht für die C++-cast-Mechanismen gibt es z.B. hier:

    http://www.cpp-tutor.de/cpp/le04/le04_01.htm

    MfG



  • Hallo Probe-Nutzer

    Hertzlichen dank für deine Antwort!!

    Wo sieht man an diesem code das es mit eine WM-Nachricht in verbindung steht.
    auser das es im kommentar beschriben ist? ich möchte auch eine selbst definierte WM_Nachricht senden ( auslösen) ich bekomme es nicht hin.

    Grüße Can

    LRESULT CMidiTestDlg::OnMidiEvent(WPARAM wParam, LPARAM lParam)
    {
    //diese Funktion wird durch die WM_MYMIDIIN_EVENT Nachricht ausgelößt, der WPARAM beinhaltet
    //dabei den Pointer aud das lpEvent, welches nun hier in dieser Klasse verwendet werden kann.
    LPMIDIEVENT lpEvent = reinterpret_cast<LPMIDIEVENT>(wParam);

    MidiIn.EchoOut->Put(lpEvent);

    pEvent.data1 = lpEvent->data1 +3;
    pEvent.data2 = lpEvent->data2;
    pEvent.data3 = lpEvent->data3;
    pEvent.status = lpEvent->status + 2;
    pEvent.time = lpEvent->time;
    // MidiIn.EchoOut->Put(&pEvent);
    return 0;
    }



  • an der Bezeichnung WM_MYMIDIIN_EVENT kann man erkennen, daß es sich um eine benutzerdefinierte Nachricht und keine in MFC vordefinierte handelt. Die Verbindung zwischen Nachrichten und deren Behandlungs-Funktionen wird in den MFC über die Message-Maps hergestellt (davon solltest du, wenn du dich mit MFC schon etwas beschäfigt hast, schon gehört haben, es ist eines der zentralen Konzepte). Also suche doch einfach in der Message-Map nach dem Bezeichner WM_MYMIDIIN_EVENT, und du erkennst das dafür zuständige Makro, womit die Verbindung hergestellt wird. Analog kannst du dann auch selber Nachrichten mit dem entsprechenden Handler festlegen, siehe auch:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_on_message.asp

    und bei noch mehr Interesse am Thema die "technical note" dazu:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfcnotes_tn006.asp

    MfG


Anmelden zum Antworten