mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Funktionspointer


Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bekomme folgende Fehlermeldung.

Error[Pe167]: argument of type "void *" is incompatible with parameter 
of type "void (void) *"

Ich habe eine Funktion die ist wie folgt deklariert.

BYTE Timertestfunktion(void* CallBkFuntion, DWORD TimeOut)

in dieser Funktion wird eine 2. Funktion aufgerufen.

Bibfunktion(&TIDMsgRespTimer, CallBkFuntion, TimeOut);

Bei der Bibfunktion (CallBkFuntion) taucht dann auch die Fehlermeldung 
auf.

Die Übergabewerte kann ich bei beiden Funktionen nicht ändern.
Weiß jemand wie ich dieses Problem in den Griff bekommen könnte?

Gruß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Micha schrieb:

> Die Übergabewerte kann ich bei beiden Funktionen nicht ändern.

Solltest du aber.

Pointer zurechtzucasten ist meistens ein sehr sicheres Indiz, dass 
irgendetwas nicht stimmt. Und einen void* in einen Funktionspointer 
casten zu müssen, ist ganz besonders übel.

Das hier
BYTE Timertestfunktion(void* CallBkFuntion, DWORD TimeOut)

sollte eigentlich so aussehen
BYTE Timertestfunktion(void (*CallBkFuntion)(void), DWORD TimeOut)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Und einen void* in einen Funktionspointer
> casten zu müssen, ist ganz besonders übel.

Genauer gesagt: das ist vom C-Standard nicht gedeckt.  Man darf einen
Zeiger auf ein Objekt in einen Zeiger vom Typ void* casten und dann
zurück auf den Objektzeiger, aber Funktionszeiger darf man nur auf
andere Funktionszeiger casten, nicht auf Objektzeiger (und umgekehrt).

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnellen Antworten. Ich habe jetzt den Übergabewert der 
Timertestfunktion geändert.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.